Можете ли вы привязать выбранный элемент в списке к отдельному объекту в WPF? - PullRequest
3 голосов
/ 10 декабря 2008

Если у меня есть два объекта, один из которых является списком элементов, а другой имеет свойство, хранящее выбранный элемент другого списка, возможно ли обновить выбранный элемент с помощью привязки в 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 ]

2 голосов
/ 10 декабря 2008

Я полагаю, что вы должны быть в состоянии сделать это (не забудьте объявить локальное пространство имен):

<Window.Resources>
    <local:MyDataStructure x:Key="mds1" />
</Window.Resources>    
<ListBox ItemsSource="{Binding Data}" SelectedValue="{Binding Source={StaticResource mds1} Path=ChosenItem}"/>
1 голос
/ 10 декабря 2008

Создайте эти два свойства внутри одного класса (просто для упрощения решения) и подготовьте код для событий, изменяющих свойства

 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 ListBox Теперь напишите код XBL ListBox, как показано ниже. Привязка SelectedValue делает свое дело здесь.

<ListBox ItemsSource="{Binding Data}" SelectedValue="{Binding Path=ChosenItem}" x:Name="listBox"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...