MVVM:绑定到 ListBox.SelectedItem?
Posted
技术标签:
【中文标题】MVVM:绑定到 ListBox.SelectedItem?【英文标题】:MVVM: Binding to ListBox.SelectedItem? 【发布时间】:2010-11-25 22:38:10 【问题描述】:如何将视图模型属性绑定到 ListBox.SelectedItem 属性?
我创建了一个简单的 MVVM 演示来尝试解决这个问题。我的视图模型具有以下属性:
private ObservableCollection<DisneyCharacter> p_DisneyCharacters;
public ObservableCollection<DisneyCharacter> DisneyCharacters
get return p_DisneyCharacters;
set
p_DisneyCharacters = value;
base.FirePropertyChangedEvent("DisneyCharacters");
private DisneyCharacter p_SelectedItem;
public DisneyCharacter SelectedItem
get return p_SelectedItem;
set
p_SelectedItem = value;
base.FirePropertyChangedEvent("SelectedItem");
我想将 SelectedItem 属性绑定到列表框中选定的项目。这是列表框的 XAML:
<ListBox ItemTemplate="StaticResource MasterTemplate"
ItemsSource="Binding Path=DisneyCharacters"
SelectedItem="Binding Path=Selectedtem, Mode=TwoWay"
HorizontalAlignment="Stretch" />
这是我的问题:当我更改列表框中的选择时,视图模型 SelectedItem 属性未更新。
我做了一个测试,我用 SelectedIndex 属性临时替换了视图模型的 SelectedItem 属性,并将它绑定到 ListBox.SelectedIndex 属性。该属性更新得很好——只是我无法使用的 SelectedItem 属性。
那么,如何修复 SelectedItem 绑定?感谢您的帮助。
【问题讨论】:
如何在 MVVM 中使用列表框的一个很好的例子。谢谢 【参考方案1】:嗯,就是这样,大如生命。在 XAML 中。我正在绑定到视图模型属性“Selectedtem”。不幸的是,实际名称是“SelectedItem”。所以这段代码确实有效——我今天下午早些时候解决了这个问题,然后花了下午剩下的时间和整个晚上在网上搜索,直到我注意到拼写错误。
今天下午 3:00,我的妻子告诉我,“你知道,这将是一件小事。”它确实如此 - 缺少一个字母“I”。好吧,至少我现在可以睡觉了。
【讨论】:
为了帮助您更快地发现这些问题,如果您调试您的应用程序,您应该会在 Visual Studio 的输出窗口中看到 WPF 绑定错误,表明属性“Selectedtem”不存在。希望这能帮助您在未来更快地找到此类错误。 我希望我在一年前开始 Silverlight 开发时就知道输出窗口中的绑定错误。就在你开始认为自己是一个体面的开发人员时...... @BoxerBucks,我认为您不会在 SilverLight 中收到 任何 通知或失败绑定的日志。 @Sam - 您应该在 Visual Studio 的输出窗口中收到绑定错误。如果绑定失败,它就在那里。看看这条链顶端的 Andy 的评论。 在这种情况下,您可能应该在视图模型公共属性上使用大写字母。然后您知道您正在绑定到该属性。如上所述,在运行时使用 ctrl-f & 在输出窗口中搜索“绑定”。如果 WPF 中的绑定失败,这将为您提供错误以上是关于MVVM:绑定到 ListBox.SelectedItem?的主要内容,如果未能解决你的问题,请参考以下文章
UWP 绑定到 MVVM 中的 AutoSuggestBox