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

时间:2008-12-10 02:32:32

标签: .net wpf data-binding xaml

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

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

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

public class MyDataStructure
{
    public Guid ChosenItem { get; set; }
}

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

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

2 个答案:

答案 0 :(得分:2)

我相信你应该能够做到这一点(确保声明本地命名空间):

<Window.Resources>
    <local:MyDataStructure x:Key="mds1" />
</Window.Resources>    
<ListBox ItemsSource="{Binding Data}" SelectedValue="{Binding Source={StaticResource mds1} Path=ChosenItem}"/>

答案 1 :(得分:1)

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

 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;
}

创建此类的实例并绑定到ListBox的DataContext 现在编写ListBox XAML代码如下所示。 SelectedValue绑定正在这里诀窍。

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