Wpf 在UserControl实例中设置ComboBox的属性

Wpf 在UserControl实例中设置ComboBox的属性,wpf,xaml,mvvm,user-controls,Wpf,Xaml,Mvvm,User Controls,我有一个UserControl,它包含2个组合框和2个文本框。我在主窗口中有两个UserControl实例 UserControl第二个实例的可见性绑定到主窗口中的复选框-UserControl根据CheckBox.IsChecked属性变为隐藏/可见 复选框本身的IsChecked和IsEnabled属性绑定到UserControl第一个实例中第一个ComboBox的SelectedItem属性,例如:如果值为null,则它们将为false。我使用的是MVVM,所以这个绑定是在ViewMode

我有一个UserControl,它包含2个组合框和2个文本框。我在主窗口中有两个UserControl实例

UserControl第二个实例的可见性绑定到主窗口中的复选框-UserControl根据CheckBox.IsChecked属性变为隐藏/可见

复选框本身的IsChecked和IsEnabled属性绑定到UserControl第一个实例中第一个ComboBox的SelectedItem属性,例如:如果值为null,则它们将为false。我使用的是MVVM,所以这个绑定是在ViewModel部分定义的

我的问题是-是否有办法通过主窗口中的XAML访问UserControl组合框之一的SelectedIndex属性,因此当复选框未选中时,UserControl的第二个实例将变为隐藏,第二个实例中组合框的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"/>

主窗口XAML中的2个实例和复选框:

<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}"/>

您始终可以添加一个
DependencyProperty
来公开组合框。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); }
}
您没有说要重置哪个
组合框
,因此我将用这个来演示如何将
组合框绑定。使用
相对资源绑定将SelectedIndex
属性绑定到新的
DependencyProperty

<ComboBox x:Name="comboQueryType" SelectedIndex="{Binding SelectedIndex,
    RelativeSource={RelativeSource AncestorType={x:Type local:FilterUC}}}"
    SelectedItem="{Binding QueryTypeComboSelectedItem, Mode=TwoWay}" />

非常感谢你的快速回答。我已经测试了所提出的解决方案,它应该是有效的。似乎有人不知何故忽略了“”。(但第一个的行为与预期的一样)。我试图找到一个解决办法,但没有成功。如果您能提供进一步的帮助或进行一次小规模的演示,我将不胜感激。谢谢。
<Style TargetType="{x:Type local:FilterUC}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsChecked,
                       ElementName=cbTwoFields}" Value="False">
             <Setter Property="Visibility" Value="Hidden"/>
             <Setter Property="SelectedIndex" Value="0" />
        </DataTrigger>
    </Style.Triggers>
</Style>