2013-06-21 173 views
0

我對MVVM作爲一個概念頗爲陌生,我目前正試圖設置一些東西,以便更改TabControl的選定索引將更改我擁有的ComboBox的項目源。目前,我有事情設置如下:MVVM TabControl更新組合框

public int SelectedTabIndex 
    { 
     get 
     { 
      return _selectedTabIndex; 
     } 
     set 
     { 
      _selectedTabIndex = value; 
      if (_selectedTabIndex == 0) 
      { 
       _readOnlyArray = ReadOnlyArrays.ReadOnlyColumnArrays.LoanerItemsSelect; 
      } 
      else if (_selectedTabIndex == 1) 
      { 
       _readOnlyArray = ReadOnlyArrays.ReadOnlyColumnArrays.CustomerSelect; 
      } 
      else if (_selectedTabIndex == 2) 
      { 
       _readOnlyArray = ReadOnlyArrays.ReadOnlyColumnArrays.JobSelect; 
      } 
     } 

這勢必一個TabControl以下內容:

SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}" 

我也有這樣的:

public string[] ReadOnlyArray 
    { 
     get { return _readOnlyArray; } 

     set { _readOnlyArray = value;} 
    } 

這勢必給組合框如下:

ItemsSource="{Binding readOnlyArray, Mode=TwoWay}" 

我知道最有可能我這樣做完全錯誤,但我希望ComboBox的項目源更新每當TabControl的Tab索引被更改。

+0

不相干的問題,爲什麼當它定義一個公共setter時,該屬性稱爲「ReadOnlyArray」? – PoweredByOrange

+0

@ programmer93這是一個可怕的名字。 ComboBox的ItemSource是一個ReadOnly數組。我有點草率地命名它,並計劃在事情奏效後改變它。 – DanteTheEgregore

回答

1

您應該在SelectedTabIndex更改後通知ReadOnlyArray正在更改的接口。假設您的視圖模型實現INotifyPropertyChanged,你需要消防approppriate事件處理:

set 
    { 
     _selectedTabIndex = value; 
     if (_selectedTabIndex == 0) 
     { 
      _readOnlyArray = ReadOnlyArrays.ReadOnlyColumnArrays.LoanerItemsSelect; 
     } 
     else if (_selectedTabIndex == 1) 
     { 
      _readOnlyArray = ReadOnlyArrays.ReadOnlyColumnArrays.CustomerSelect; 
     } 
     else if (_selectedTabIndex == 2) 
     { 
      _readOnlyArray = ReadOnlyArrays.ReadOnlyColumnArrays.JobSelect; 
     } 

     //Your helper method from base class calling   
     // INotifyPropertyChanged.PropertyChanged event 
     this.RaisePropertyChanged("ReadOnlyArray"); 
    } 

如果仍然不工作,檢查出的VisualStudio輸出窗口任何約束力的錯誤。

+0

完美工作。非常感謝。 – DanteTheEgregore