2012-11-06 60 views
0

在WPF中使用MVVM架構。是否有可能從ViewModel確定哪個是相應視圖上最後使用的ListBox?wpf mvvm上次使用的listbox從視圖模型中查看代碼

我有2個ListBox和一個TreeView。列表框包含不同類型的列表,我想用它們在TreeView中創建複合數據。

我想有版本中,我可以在兩個列表框之間進行選擇,並TreeView的,因爲我有一個TreeView的太操作方法。

THX的幫助!

+0

您可以定義或展開「上次使用」的含義嗎?你的意思是最後添加的ListBox,最後一個點擊等等? – Thelonias

回答

2

爲了簡單起見,您可以在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屬性的綁定,它將會工作。

+0

我想有版本,我可以在兩個ListBox和TreeView之間進行選擇,因爲我也有TreeView的操作.. – user1802693

+1

Dmitry的答案也可以很容易地修改以適應TreeView。也許你應該嘗試一下? –

0

您可以檢查所選擇的變化,看看誰是最後的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"; 
} 
相關問題