【问题标题】:MVVM: Binding to ListBox.SelectedItem?MVVM:绑定到 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 中使用列表框的一个很好的例子。谢谢

标签: wpf data-binding mvvm


【解决方案1】:

嗯,就是这样,大如生命。在 XAML 中。我正在绑定到视图模型属性“Selectedtem”。不幸的是,实际名称是“SelectedItem”。所以这段代码确实有效——我今天下午早些时候解决了这个问题,然后花了下午剩下的时间和整个晚上在网上搜索,直到我注意到拼写错误。

今天下午 3:00,我的妻子告诉我,“你知道,这将是一件小事。”它确实如此 - 缺少一个字母“I”。好吧,至少我现在可以睡觉了。

【讨论】:

  • 为了帮助您更快地发现这些问题,如果您调试您的应用程序,您应该会在 Visual Studio 的输出窗口中看到 WPF 绑定错误,表明属性“Selectedtem”不存在。希望这能帮助您在未来更快地找到此类错误。
  • 我希望我在一年前开始 Silverlight 开发时就知道输出窗口中的绑定错误。就在你开始认为自己是一个体面的开发人员时......
  • @BoxerBucks,我认为您不会在 SilverLight 中收到 任何 通知或失败绑定的日志。
  • @Sam - 您应该在 Visual Studio 的输出窗口中收到绑定错误。如果绑定失败,它就在那里。看看这条链顶端的 Andy 的评论。
  • 在这种情况下,您可能应该在视图模型公共属性上使用大写字母。然后您知道您正在绑定到该属性。如上所述,在运行时使用 ctrl-f & 在输出窗口中搜索“绑定”。如果 WPF 中的绑定失败,这将为您提供错误
猜你喜欢
  • 2013-10-08
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多