Wpf 在UserControl实例中设置ComboBox的属性
我有一个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: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
<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>