2013-06-21 109 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