在WPF中使用MVVM架構。是否有可能從ViewModel確定哪個是相應視圖上最後使用的ListBox?wpf mvvm上次使用的listbox從視圖模型中查看代碼
我有2個ListBox和一個TreeView。列表框包含不同類型的列表,我想用它們在TreeView中創建複合數據。
我想有版本中,我可以在兩個列表框之間進行選擇,並TreeView的,因爲我有一個TreeView的太操作方法。
THX的幫助!
在WPF中使用MVVM架構。是否有可能從ViewModel確定哪個是相應視圖上最後使用的ListBox?wpf mvvm上次使用的listbox從視圖模型中查看代碼
我有2個ListBox和一個TreeView。列表框包含不同類型的列表,我想用它們在TreeView中創建複合數據。
我想有版本中,我可以在兩個列表框之間進行選擇,並TreeView的,因爲我有一個TreeView的太操作方法。
THX的幫助!
爲了簡單起見,您可以在viewmodel中引入任何標誌,當指定的ListBox的SelectedItem發生更改時,該標誌將打開/關閉。 類似於
private bool _isFirstBoxWasLastChanged;
object FirstListSelectedItem
{
get { return _fSelectedItem;}
set {
_fSelectedItem = value;
_isFirstBoxWasLastChanged = true;
RaisePropertyChanged("FirstListSelectedItem");
}
}
object SecondListSelectedItem
{
get { return _sSelectedItem;}
set {
_sSelectedItem = value;
_isFirstBoxWasLastChanged = false;
RaisePropertyChanged("SecondListSelectedItem");
}
}
ofc。如果您使用SelectecItem屬性的綁定,它將會工作。
我想有版本,我可以在兩個ListBox和TreeView之間進行選擇,因爲我也有TreeView的操作.. – user1802693
Dmitry的答案也可以很容易地修改以適應TreeView。也許你應該嘗試一下? –
您可以檢查所選擇的變化,看看誰是最後的ListBox
<StackPanel>
<ListBox ItemsSource="{Binding lstItens}" SelectedItem="{Binding itemSelected}" />
<ListBox ItemsSource="{Binding lstItensTwo}" SelectedItem="{Binding itemSelectedTwo}" />
</StackPanel>
在您的視圖模型:
class ViewModel : INotifyPropertyChanged
{
private string vmFlagType;
public string VmFlagType
{
get { return vmFlagType; }
set
{
vmFlagType = value;
OnPropertyChanged("VmFlagType");
}
}
private ObservableCollection<string> lstItens;
public ObservableCollection<string> LstItens
{
get { return lstItens; }
set
{
lstItens = value;
OnPropertyChanged("LstItens");
}
}
private ObservableCollection<string> lstItensTwo;
public ObservableCollection<string> LstItensTwo
{
get { return lstItensTwo; }
set
{
lstItensTwo = value;
OnPropertyChanged("LstItensTwo");
}
}
private string itemSelected;
public string ItemSelected
{
get { return itemSelected; }
set
{
itemSelected = value;
VmFlagType = flagTypes.ListOne;
OnPropertyChanged("ItemSelected");
}
}
private string itemSelectedTwo;
public string ItemSelectedTwo
{
get { return itemSelectedTwo; }
set
{
itemSelectedTwo = value;
VmFlagType = flagTypes.ListTwo;
OnPropertyChanged("ItemSelectedTwo");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
只需創建一個類你決定哪些列表改變過去阿西斯時間:
public class flagTypes
{
public const string ListOne = "ListOne";
public const string ListTwo = "ListTwo";
}
您可以定義或展開「上次使用」的含義嗎?你的意思是最後添加的ListBox,最後一個點擊等等? – Thelonias