我有ObservableCollection一些數據。它們顯示爲Master(ListBox)和Detail(某些標籤)。我使用綁定和IsSynchronizedWithCurrentItem來向選定的主項目顯示正確的細節。這工作都很好。現在我想編輯一些細節(加載不同的圖像)。我在ViewModel中實現了這個按鈕命令。MVVM模式在主從詳細編輯細節
但我怎麼知道ViewModel層中的哪個項目被選中(UI)?
感謝您的幫助
我有ObservableCollection一些數據。它們顯示爲Master(ListBox)和Detail(某些標籤)。我使用綁定和IsSynchronizedWithCurrentItem來向選定的主項目顯示正確的細節。這工作都很好。現在我想編輯一些細節(加載不同的圖像)。我在ViewModel中實現了這個按鈕命令。MVVM模式在主從詳細編輯細節
但我怎麼知道ViewModel層中的哪個項目被選中(UI)?
感謝您的幫助
我沒有真正找到IsSynchronizedWithCurrentItem財產,在MVVM情況下非常有用。 只需在ViewModel中公開另一個SelectedItem屬性。
public ItemType SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
// your logic here
}
}
您需要綁定一個值,或可枚舉您的視圖模型到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}"
如果我理解你的權利,你正在尋找的是以下
<ListBox SelectedItem="{Binding ObjectName, UpdateSourceTrigger=PropertyChanged}"/>
加上你的ViewModel下你必須聲明以下
public YourObject ObjectName { get; set; }
就這麼簡單!
正常的方式來檢測該集合中的項目在用戶界面中當前選擇是將數據結合相同類型的屬性作爲收集到ListBox.SelectedItem
屬性中的項目:
<ListBox ItemsSource="{Binding SomeCollection}"
SelectedItem="{Binding SomeProperty}" />
現在,只要用戶選擇一個新的項目,在SomeProperty
制定者將被稱爲:
public YourDataType SomeProperty
{
get { return someProperty; }
set
{
someProperty = value;
// The value has just changed
}
}