在UserControl实例中设置ComboBox的属性

时间:2014-02-13 18:12:17

标签: wpf xaml mvvm user-controls

我有一个UserControl,包含2个ComboBoxes和2个TextBoxes。我在MainWindow中有2个UserControl实例。

UserControl的第二个实例的可见性被绑定到位于MainWindow中的CheckBox - 根据CheckBox.IsChecked属性,UserControl变为隐藏/可见。

CheckBox本身的IsChecked和IsEnabled属性绑定到UserControl的第一个实例中第一个ComboBox的SelectedItem属性 - 例如:如果值为null,则它们将为false。我正在使用MVVM,因此这个绑定是在ViewModel部件上定义的。

我的问题是 - 有没有办法通过MainWindow中的XAML访问UserControl的一个ComboBox的SelectedIndex属性,所以当CheckBox是UnChecked时,除了UserControl的第二个实例将转为Hidden ,第二个实例中ComboBox的SelectedIndex将变为0?

UserControl XAML:

<ComboBox x:Name="comboField" ItemsSource="{Binding Fields}"
          DisplayMemberPath="Key"
          SelectedItem="{Binding FieldComboSelectedItem, Mode=TwoWay}"/>
<TextBox x:Name="tbFirstValue"/>
<ComboBox x:Name="comboQueryType"
          SelectedItem="{Binding QueryTypeComboSelectedItem, Mode=TwoWay}"/>
<TextBox x:Name="tbSecondValue"/>

MainWindow XAML中的2个实例和CheckBox:

<local:FilterUC x:Name="firstFilter"/>    
<local:FilterUC x:Name="secondFilter">
    <local:FilterUC.Style>
        <Style TargetType="{x:Type local:FilterUC}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked,
                               ElementName=cbTwoFields}" Value="False">
                     <Setter Property="Visibility" Value="Hidden"/>
                                 <!--This is what I want to achieve:-->
                     <!--<Setter ElementName="comboField"
                                 Property="SelectedIndex" Value="0" />-->
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </local:FilterUC.Style>
</local:FilterUC>
<CheckBox x:Name="cbTwoFields" Content="Add filter" 
          IsEnabled="{Binding ElementName=firstFilter, 
                              Path=DataContext.AddFilterEnable}" 
          IsChecked="{Binding ElementName=firstFilter, 
                              Path=DataContext.AddFilterChecked}"/>

1 个答案:

答案 0 :(得分:1)

您可以随时添加DependencyProperty以展示ComboBox.SelectedIndex属性:

public static DependencyProperty SelectedIndexProperty = DependencyProperty.Register(
    "SelectedIndex", typeof(int), typeof(FilterUC), new PropertyMetadata(0));

public int SelectedIndex
{
    get { return (int)GetValue(SelectedIndexProperty); }
    set { SetValue(SelectedIndexProperty, value); }
}

您没有说明要重置哪个ComboBox,所以我只是用这个来演示如何将ComboBox.SelectedIndex属性绑定到新{{1}使用DependencyProperty

RelativeSource Binding

然后能够在<ComboBox x:Name="comboQueryType" SelectedIndex="{Binding SelectedIndex, RelativeSource={RelativeSource AncestorType={x:Type local:FilterUC}}}" SelectedItem="{Binding QueryTypeComboSelectedItem, Mode=TwoWay}" /> 中访问它。试试这个:

DataTrigger