代码之家  ›  专栏  ›  技术社区  ›  Cameron MacFarland

可以将列表框中的选定项绑定到WPF中的单独对象吗?

  •  3
  • Cameron MacFarland  · 技术社区  · 16 年前

    如果我有两个对象,一个是项目列表,另一个是存储其他列表中所选项目的属性,是否可以通过在WPF中绑定来更新所选项目?

    假设我有这两个数据结构:

    public class MyDataList
    {
        public ObservableCollection<Guid> Data { get; set; }
    }
    
    public class MyDataStructure
    {
        public Guid ChosenItem { get; set; }
    }
    

    是否可以将一个列表框绑定到两个对象的实例,以便由列表框的选定项设置ChosenItem属性?

    编辑:为了让事情更清楚一点,可能有许多mydatastructure实例,每个实例都有一个从mydatalist中选择的项。数据列表对于所有实例都是通用的,我需要一种方法来选择一个项目并将该选择存储在mydatastructure中。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Excel Kobayashi    16 年前

    我相信您应该能够这样做(确保声明本地命名空间):

    <Window.Resources>
        <local:MyDataStructure x:Key="mds1" />
    </Window.Resources>    
    <ListBox ItemsSource="{Binding Data}" SelectedValue="{Binding Source={StaticResource mds1} Path=ChosenItem}"/>
    
        2
  •  1
  •   Jobi Joy    16 年前

    将这两个属性放在一个类中(只是为了简化解决方案),并使代码为属性更改事件做好准备。

     public class MyDataList : INotifyPropertyChanged
    {
        private Guid _choosen;
    
        public ObservableCollection<Guid> Data { get; set; }
    
        public Guid ChosenItem {
            get
            {
                return _choosen;
            }
            set 
            {
                _choosen = value;
                PropertyChanged(this, new PropertyChangedEventArgs("ChosenItem"));
            } 
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    }
    

    创建此类的实例并绑定到列表框的DataContext 现在编写列表框XAML代码,如下所示。selectedValue绑定在这里实现了这一点。

    <ListBox ItemsSource="{Binding Data}" SelectedValue="{Binding Path=ChosenItem}" x:Name="listBox"/>