c# – 焦点更改时更改绑定
发布时间:2020-12-15 22:25:08 所属栏目:百科 来源:网络整理
导读:我有一个具有多个树视图和一个propertygrid的应用程序(来自扩展的 WPF工具包).目标是显示所选项目的属性.我是WPF的新手,所以我从一个树视图开始,并像这样绑定propertygrids选择的对象 xctk:PropertyGrid x:Name="xctkPropertyGrid" Grid.Column="2" ShowSear
我有一个具有多个树视图和一个propertygrid的应用程序(来自扩展的
WPF工具包).目标是显示所选项目的属性.我是WPF的新手,所以我从一个树视图开始,并像这样绑定propertygrids选择的对象
<xctk:PropertyGrid x:Name="xctkPropertyGrid" Grid.Column="2" ShowSearchBox="False" ShowSortOptions="False" SelectedObject="{Binding ElementName=actionsTreeView,Path=SelectedItem,Mode=OneWay}"> </xctk:PropertyGrid> 这似乎工作正常.但它当然会一直绑定到actionsTreeView.当焦点更改为另一个树视图中的另一个选定项时,我真正需要的是更新该属性网格.我已经使用每个树视图的SelectedItemChanged实现了我的目标,并像这样设置了propertygrids selectedobject.这是否可能使用数据绑定和触发器.我的解决方案增加了一些代码和紧密耦合,并且感觉不是很MVVM. 亲切的问候, 解决方法
好的,这是我最终解决问题的方法:
每个树视图都绑定到主视图模型上的viemodel属性.我还在主视图模型上创建了一个SelectedItem属性,像这样绑定了propertygrid的SelectedObject: private object selectedItem; public object SelectedItem { get { return selectedItem; } set { selectedItem = value; OnPropertyChanged("SelectedItem"); } } 然后,我将一个行为附加到每个更新此SelectedItem的树视图: public class UpdateSelectedItemBehavior : Behavior<TreeView> { protected override void OnAttached() { base.OnAttached(); this.AssociatedObject.GotFocus += AssociatedObject_GotFocus; this.AssociatedObject.SelectedItemChanged += AssociatedObject_SelectedItemChanged; } void AssociatedObject_SelectedItemChanged(object sender,RoutedPropertyChangedEventArgs<object> e) { ViewModels.MainViewModel mainViewModel = AssociatedObject.DataContext as ViewModels.MainViewModel; if (mainViewModel != null) { mainViewModel.SelectedItem = AssociatedObject.SelectedItem; } } void AssociatedObject_GotFocus(object sender,RoutedEventArgs e) { ViewModels.MainViewModel mainViewModel = AssociatedObject.DataContext as ViewModels.MainViewModel; if (mainViewModel != null) { mainViewModel.SelectedItem = AssociatedObject.SelectedItem; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |