我有一个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}"/>
答案 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