繁体   English   中英

WPF DataBinding-绑定到更改引用对象的代码隐藏变量

[英]WPF DataBinding - bind to code-behind variable which changes referenced object

我想做什么:我有一个ListBox绑定到ObservableCollection<MyClass> 选择项目时,我想在某些标签中显示其某些属性。 这里有什么步骤? 我已经将标签的内容设置为{Binding Path=PropertyName} 他们的DataContext应该是什么?

我要怎么做:我在窗口的代码隐藏中保留了一个私有变量,称为MyClass selectedItem ,我希望所有绑定都指向该变量及其属性。 在我看来,绑定到代码逻辑中具有明确含义的变量比呈现元素的所选项目更“语义”。

此变量可以并且将在任何给定时间引用不同的MyClass实例(我将在ListBox SelectionChanged处理程序中对其进行更改)。 我希望绑定能够反映这一点-始终指向selectedItem当前引用的实例的属性。 这会工作吗? 绑定是否总是指向变量所指向的对象? 还是会在设置绑定时指向变量所引用的对象? (后者将是我的猜测)

我可以想到的可能替代方法:绑定到列表框的SelectedItem,而不是引用它的变量。 如果要这样做,如何使其成为类型安全的? 如何确保绑定知道它不是与通用ListBoxItem一起使用,而是与MyClass实例一起使用,以便可以看到其属性? 需要这个吗?

有什么建议或解释为什么我会很愚蠢,还是有经验的人可以选择替代方法? 谢谢!

我建议您使用替代方法,我认为这是做您想要的事情的常用方法。 如果您没有在代码后面或XAML中填充ListBox,则SelectedItem属性将保存MyClass实例而不是ListBoxItem实例。

然后,要么将ListBox的SelectedItem属性用作标签的DataContext,要么在ViewModel中创建类型MyClass的属性,该属性绑定到SelectedItem属性(Mode = TwoWay)。 然后,您可以像这样绑定其属性:

<Label Text="{Binding Path=MySelectedItem.Text}"/>

在这种情况下,标签的DataContext必须是ViewModel。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM