如何将ComboBoxItem头绑定到兄弟ListView的Combobox控件的项数

时间:2015-12-14 09:00:35

标签: c# wpf data-binding combobox

为什么我的第一个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" });

        }
    }

2 个答案:

答案 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}"/>

这只是为了向您展示这个想法。在你真实的情况下,它可能需要稍微调整一下。

相关问题