Как создать двустороннюю ссылку на свойство SelectedItem объекта ListView? - PullRequest
3 голосов
/ 06 октября 2010

Я недавно принял проект MVVM, начатый кем-то, кто сейчас покинул компанию; Я впервые использую WPF, но, судя по всему, он впервые использовал и WPF, и ООП ...

В любом случае, у меня есть ListView в XAML, и у меня есть класс коллекции, который в настоящее время не содержит свойства SelectedItem.

Может кто-нибудь сказать мне, какой код мне нужно вставить, чтобы связать SelectedItem ListView с еще не написанным свойством SelectedItem моей коллекции, а затем какой код мне нужно вставить, чтобы SelectedItem коллекции ссылки обратно на ListView?

Извиняюсь за вопрос на уровне домашней работы, но код, с которым я работаю, является таким кошмаром, что я пока не могу понять, как писать WPF? в то же время, как «как переписать этот ужас кодирования как ООП?» так что если кто-то может предоставить мне пример кода, я смогу вставить его в кошмар ...

Ответы [ 2 ]

6 голосов
/ 06 октября 2010

Вы можете использовать привязку WPF для выполнения своей задачи.Извините, код будет на C #, но он не должен быть сложным для понимания и адаптации в VB.NET;):

В Xaml ваша привязка должна использовать режим TwoWay, потому что вы хотите, чтобы любой пользовательский интерфейсОбновление отражается в модели представления.

<ListView SelectedItem="{Binding SelectedItem, Mode=TwoWay}" ItemsSource="{Binding MyObjects}"/>

В вашей ViewModel необходимо реализовать INotifyPropertyChanged, чтобы система привязки WPF была уведомлена об изменениях свойств в ViewModel.

public class MyViewModel: INotifyPropertyChanged
{
  private MyObj selectedItem;
  public MyObj SelectedItem
  {
    get{return this.selectedItem;}
    set
    {
      if(value!=selectedItem)
      {
        selectedItem = value;
        RaisePropertyChanged("SelectedItem");
      }

    [... your collection....]
    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged(string propertyName)
    {
      var propertyChanged = this.PropertyChanged;
      if(propertyChanged!=null) 
        propertyChanged(new PropertyChangedEventArgs(propertyName));
    }
0 голосов
/ 06 октября 2010

Lv.selected item вернет вам ссылку на объект в коллекции, представленной видимым выбранным элементом, если вы правильно сделали привязку данных.

dim s as List( of MyObj) 
ctype(ListVeiw1.SelectedItem,MyObj).MyProp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...