我使用MVVM光将ListView绑定到ViewModel上的ItemSource . 当对ViewModel上的属性进行更改时,SelectedItem不会在View中更新 .
XAML:
<ListView Grid.Row="1" SelectionMode="Single" ItemsSource="{Binding filteredAppListItemSource}" SelectedItem="{Binding selectedApp, Mode=TwoWay}">
视图模型:
public Model.V_PWT_APP_ALL selectedApp { get { return this._selectedApp; } set { this._selectedApp = value; RaisePropertyChanged(() => selectedApp); } }
从视图中选择项目会更新ViewModel,并且会更新从SelectedItem派生数据的所有控件 . TwoWay绑定似乎不起作用 .
2 回答
如果您希望继续使用INotified属性更改接口,则应按照以下文档设置代码:https://msdn.microsoft.com/en-us/library/ms184414(v=vs.110).aspx .
由于您似乎不是在更改属性,而是更改项目并通知ItemsSource,因此更好的方法是实现IObserver / IObservable接口 . 这稍微简单一些,它在模型本身的类中不断更新整洁和可管理性 . 这是一个可能的代码示例:
对于viewModel:
这一开始可能看起来很乏味,但它帮助我很好地最小化和管理了ItemsSource中的更新和错误 . 最后,我发现在使用ListView ItemsSource时控制scrollView相当繁琐,并且只需使用ListView.Items.Insert(...)方法就好了,因为在更新ItemsSource并选择了scrollview时它具有经常抛出一个OutOfRange异常 . 这在MVVM中调试起来很困难 . 但是,这是另一个话题 . 我希望这有帮助 .
我发现问题出在SelectedItem Binding上 . 我发现我没有正确选择项目 . 我切换到使用SelectedIndex并找到正确的索引,绑定按预期工作 .