如何创建ListView的SelectedItem属性的双向链接?

Fro*_*840 3 .net vb.net data-binding wpf xaml

我最近接手了一个MVVM项目,该项目由一个现在离开公司的人开始; 这是我第一次使用WPF,但从它的外观来看,这是他第一次同时使用WPF和OOP ......

无论如何,我在XAML中有一个ListView,而且我有一个目前不包含"SelectedItem"属性的集合类.

有人可以告诉我我需要输入什么代码来将ListView的SelectedItem链接到我的集合的尚未写入的SelectedItem属性,然后我需要放入什么代码以便集合的SelectedItem链接回ListView?

对于家庭作业级别的问题抱歉,但我正在使用的代码是一个噩梦,我还无法解决"如何编写WPF?" 与此同时"如何将这种编码恐怖重写为OOP?" 所以,如果有人可以提供一些示例代码,我可以将其插入到噩梦......

Eil*_*aee 6

您可以使用WPF绑定来执行任务.对不起,代码将在C#中,但它应该不难理解并适应VB.NET;):

在Xaml中,您的绑定必须使用TwoWay模式,因为您希望任何UI更新都反映在viewmodel上.

<ListView SelectedItem="{Binding SelectedItem, Mode=TwoWay}" ItemsSource="{Binding MyObjects}"/>
Run Code Online (Sandbox Code Playgroud)

您的ViewModel需要实现INotifyPropertyChanged,以便在ViewModel上通知WPF绑定系统属性更改.

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));
    }
Run Code Online (Sandbox Code Playgroud)