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

时间:2012-11-26 14:26:08

标签: .net wpf data-binding datacontext selecteditem

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

我是怎么做的:我在我的窗口的代码隐藏中保留了一个名为MyClass selectedItem的私有变量,我希望所有绑定指向该变量及其属性。对于我来说,绑定到代码逻辑中具有明确含义的变量,而不是表示元素的选定项目,似乎更“语义”。

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

我能想到的可能替代方案:绑定到列表框的SelectedItem而不是引用它的变量。如果这是要走的路,如何使其类型安全?如何确保绑定将知道它不使用通用ListBoxItem,而是MyClass实例,所以它可以看到它的属性?这需要吗?

任何建议,或解释为什么我是愚蠢的,或者更有经验的替代方法?谢谢!

1 个答案:

答案 0 :(得分:3)

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

然后,您可以将ListBox的SelectedItem属性作为标签的DataContext,或者在ViewModel中创建Type MyClass的属性,该属性绑定到SelectedItem属性(Mode = TwoWay)。然后你可以像这样绑定它的属性:

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

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