为什么我的第一个Combobox项目什么都没显示?我绑定有什么问题吗?
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<x:Array x:Key="SettingsContextMenuItems" Type="system:Object">
<MenuItem Header="{Binding ElementName=MainDataGrid, Path=Items.Count}"/>
<MenuItem Header="TESTA"/>
<MenuItem Header="TESTB"/>
</x:Array>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<StackPanel>
<ComboBox ItemsSource="{StaticResource SettingsContextMenuItems}" />
</StackPanel>
<StackPanel Grid.Row="1">
<ListView x:Name="MainDataGrid" ItemsSource="{Binding TestList}"/>
</StackPanel>
</Grid>
</Window>
代码背后:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
视图模型:
public class MainViewModel
{
private ObservableCollection<Test> testList;
public ObservableCollection<Test> TestList
{
get { return testList; }
set { testList = value; }
}
public MainViewModel()
{
TestList = new ObservableCollection<Test>();
TestList.Add(new Test() { Name = "a" });
TestList.Add(new Test() { Name = "b" });
TestList.Add(new Test() { Name = "c" });
}
}
答案 0 :(得分:0)
已经解决了这个问题。虽然我不知道为什么Array中的绑定不起作用,但将所有MenuItem放入ComboBox的Items属性而不是assign ItemsSource可以解决问题。
谢谢所有回复的人。
答案 1 :(得分:0)
虽然我刚刚读到你,但最终设法解决了你的问题,我将解释我在评论中提出的解决方案。
首先,我们创建一个ObservableCollection来提供组合框
private ObservableCollection<MenuItem> menuItems;
public ObservableCollection<MenuItem> MenuItems
{
get { return menuItems; }
set { menuItems = value; }
}
然后在构造函数中,我们初始化这样的值。
MenuItem a = new MenuItem();
a.Header = MainDataGrid.Items.Count;
MenuItem b = new MenuItem();
b.Header = "TESTA";
MenuItem c = new MenuItem();
c.Header = "TESTB";
MenuItems = new ObservableCollection<MenuItem>();
MenuItems.Add(a);
MenuItems.Add(b);
MenuItems.Add(c);
最后,我们将这个集合绑定到组合框:
<ComboBox ItemsSource="{Binding MenuItems}"/>
这只是为了向您展示这个想法。在你真实的情况下,它可能需要稍微调整一下。