如何根据wpf中的另一个combox项绑定combobox中的itemsource?

时间:2016-11-24 05:42:34

标签: wpf

如果我在一个组合框中有项目是CFG_REG,INT_REG,ST_REG,CMD_REG(在枚举中定义),如果我选择项目CFG_REG,那么我应该在另一个组合框中显示GCR,PCR,LCR,CR,GSR,PSR ,如果我选择INT_REG我应该显示IE,就像那样,..我该怎么做?

     <ComboBox Grid.Column="2"
                      Grid.Row="1"
                      SelectedIndex="{Binding CMDIndex, Mode=TwoWay}"
                      x:Name="Combobox1"
                      Margin="0,0,1,0"  
                      VerticalAlignment="Top">
                    </ComboBox>   

     <ComboBox Grid.Column="3"  IsTextSearchEnabled="True"
                      Grid.Row="1"
                      x:Name="combobox2" 
                      ItemsSource="{Binding }"
                      SelectedItem="{Binding RegisterIndex,Mode=TwoWay}"
                      VerticalAlignment="Top"  IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name"
                      Margin="0,0,1,0">

                    </ComboBox>

1 个答案:

答案 0 :(得分:1)

您应该将视图模型/代码中的项目集合(即ICollection或Observable集合)绑定到第一个组合框的itemsSource。您可以绑定&#39; SelectedItem&#39;将第一个组合框添加到代码隐藏/视图模型中的属性,然后在此属性的setter中,您应该过滤掉另一个将绑定到其他组合框的Collection。我希望你明白这一点。

例如:

<ComboBox ItemsSource ={Binding Collection1} SelectedItem ={Binding SelectedItem} .../>

在守则中:

public ICollection Collection1 {get;set;}
public ICollection Collection2 {get;set;}

public string SelectedItem
{
get {..}
set{
SelectedItem = value;
ChangeSecondCollection(value);
}

public void ChangeSecondCollection(string value)
{
Collection2 = //Filter your second collection here.
}