编辑细节时,Master-Detail中的MVVM模式

时间:2014-06-10 13:43:21

标签: c# wpf mvvm master-detail

我有一个包含一些数据的ObservableCollection。它们显示为Master(ListBox)和Detail(一些标签)。我使用绑定和IsSynchronizedWithCurrentItem来显示所选主项的正确详细信息。这很好用。现在我想编辑一些细节(加载不同的图像)。我在ViewModel中实现了一个Button命令。

但我如何知道ViewModel层中选择了哪个项目(UI)?

感谢您的帮助

4 个答案:

答案 0 :(得分:0)

您需要将ViewModel的值或Enumerable值绑定到ListBox的SelectedItems属性。

SelectedItems="{Binding VMProperty}"

http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.selecteditems(v=vs.110).aspx

如果您只想选择一个项目,则需要设置:

SelectionMode="Single"
SelectedItem="{Binding VMProperty}"

答案 1 :(得分:0)

如果我理解你,你正在寻找的是以下

<ListBox SelectedItem="{Binding ObjectName, UpdateSourceTrigger=PropertyChanged}"/>

在ViewModel下,您必须声明以下内容

public YourObject ObjectName { get; set; }

这很简单!

答案 2 :(得分:0)

检测当前在UI中选择集合中哪个项目的常规方法是将与集合中的项目类型相同的属性数据绑定到ListBox.SelectedItem属性:

<ListBox ItemsSource="{Binding SomeCollection}" 
    SelectedItem="{Binding SomeProperty}" />

现在,只要用户选择新项目,就会调用SomeProperty setter:

public YourDataType SomeProperty
{
    get { return someProperty; }
    set
    {
        someProperty = value;
        // The value has just changed
    }
}

答案 3 :(得分:0)

我并没有真正找到在MVVM场景中有用的IsSynchronizedWithCurrentItem属性。 只需在ViewModel中公开另一个SelectedItem属性。

public ItemType SelectedItem
{
    get { return _selectedItem; }
    set
    {
        _selectedItem = value;
        // your logic here
    }
}