wpf listview selecteditem单向绑定

我有一个瘦客户端用户界面。 此用户界面必须始终反映远程服务器值。 此用户界面有一个必须具有OneWay绑定的列表视图。 点击一个项目不会选择它。 双击会触发激活远程服务器上的项目的事件,该事件将更新视图模型中指示该项目是活动项目的值。 该列表视图需要显示此“活动”状态,所以我将SelectedItem绑定到此ViewModel属性OneWay。 这里是我使用的XAML:

<ListView ItemsSource="{Binding Songs}" 
      SelectedItem="{Binding CurrentSong, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 
      SelectionMode="Single" 
      IsSynchronizedWithCurrentItem="True"

这个列表视图的行为就好像根本没有绑定,即单击一个项目选择它,当更新视图模型时,所选项目不会更新。

这个列表视图有一个itemtemplate,但注释它并没有影响这个问题。

viewmodel绑定属性已正确更新,除了此列表视图外,其余所有UI均正常工作。

以下是跟踪=高时发送到输出窗口的绑定跟踪信息:

在启动时:

System.Windows.Data Warning: 67 : BindingExpression (hash=42695785): Resolving source 
System.Windows.Data Warning: 70 : BindingExpression (hash=42695785): Found data context element: ListView (hash=36240198) (OK)
System.Windows.Data Warning: 78 : BindingExpression (hash=42695785): Activate with root item MainWindowViewModel (hash=64688352)
System.Windows.Data Warning: 108 : BindingExpression (hash=42695785):   At level 0 - for MainWindowViewModel.CurrentSong found accessor RuntimePropertyInfo(CurrentSong)
System.Windows.Data Warning: 104 : BindingExpression (hash=42695785): Replace item at level 0 with MainWindowViewModel (hash=64688352), using accessor RuntimePropertyInfo(CurrentSong)
System.Windows.Data Warning: 101 : BindingExpression (hash=42695785): GetValue at level 0 from MainWindowViewModel (hash=64688352) using RuntimePropertyInfo(CurrentSong): Song (hash=17014849)
System.Windows.Data Warning: 80 : BindingExpression (hash=42695785): TransferValue - got raw value Song (hash=17014849)
System.Windows.Data Warning: 89 : BindingExpression (hash=42695785): TransferValue - using final value Song (hash=17014849)

然后当属性发生变化时:

System.Windows.Data Warning: 95 : BindingExpression (hash=42695785): Got PropertyChanged event from MainWindowViewModel (hash=64688352)
System.Windows.Data Warning: 101 : BindingExpression (hash=42695785): GetValue at level 0 from MainWindowViewModel (hash=64688352) using RuntimePropertyInfo(CurrentSong): Song (hash=40270680)
System.Windows.Data Warning: 80 : BindingExpression (hash=42695785): TransferValue - got raw value Song (hash=40270680)
System.Windows.Data Warning: 89 : BindingExpression (hash=42695785): TransferValue - using final value Song (hash=40270680)

所以这个问题的答案发现在BindingExpression hash = ??? 跟踪输出。 Song对象需要重写Equals和GetHashCode方法,因为默认情况下使用引用相等,并且远程服务器将为等效对象的新实例提供服务。

链接地址: http://www.djcxy.com/p/44687.html

上一篇: wpf listview selecteditem oneway binding

下一篇: How can I mark a `DependencyProperty` as `BindsTwoWayByDefault` in UWP?