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

WPF MVVM从入门到精通3:数据绑定

附加属性未更新它绑定到的值 (MVVM)

Xamarin 条目绑定到 MVVM

使用 MVVM 两种方式绑定到 AvalonEdit 文档文本

WPF MVVM从入门到精通5:PasswordBox的绑定