【问题标题】:How do I create a two-way link the SelectedItem property of a ListView?如何创建 ListView 的 SelectedItem 属性的双向链接?
【发布时间】:2011-04-21 20:25:39
【问题描述】:

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

无论如何,我在 XAML 中有一个 ListView,并且我有一个当前不包含“SelectedItem”属性的集合类。

谁能告诉我我需要输入什么代码才能将 ListView 的 SelectedItem 链接到我的集合的尚未编写的 SelectedItem 属性,然后我需要输入什么代码才能使集合的 SelectedItem链接回 ListView?

对于家庭作业级别的问题,我深表歉意,但我正在使用的代码是一场噩梦,以至于我还无法解决“如何编写 WPF?”同时是“我如何将这种编码恐惧重写为 OOP?”所以如果有人可以为我提供一些示例代码,我可以将它插入到噩梦中......

【问题讨论】:

    标签: .net wpf vb.net data-binding xaml


    【解决方案1】:

    如果您已正确完成数据绑定,Lv.selected 项目将返回对可见选定项目表示的集合中对象的引用。

    dim s as List( of MyObj) 
    ctype(ListVeiw1.SelectedItem,MyObj).MyProp
    

    【讨论】:

      【解决方案2】:

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

      在 Xaml 中,您的绑定必须使用双向模式,因为您希望任何 UI 更新都反映在视图模型上。

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

      【讨论】:

      • 请注意——我认为您需要:
      猜你喜欢
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多