0

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

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

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

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

有什么建议或解释为什么我很愚蠢,或者有经验的人提供的替代方法?谢谢!

4

1 回答 1

3

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

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

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

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

于 2012-11-26T14:35:51.357 回答