我的WPF页面上有一个单选按钮和一个组合框。 ComboBox
是普通ComboBox
的自定义版本,可以在下拉列表中显示多个列。我想要的只是显示或隐藏某个列,具体取决于单选按钮的IsChecked
状态。我正在尝试使用DataTrigger
来避免代码落后。
<RadioButton Content="Show ID Column" x:Name="chkScrollCustomerNumber" IsChecked="True" >
<m:MultiColumnComboBox x:Name="cboCustomer" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding AllCustomers}" SelectedValuePath="customerID" DisplayMemberPath="customerID" SelectedValue="{Binding SalesOrder.customerID}">
<DataGridTextColumn x:Name="colID" Binding="{Binding customerID, Mode=Default}" />
<DataGridTextColumn Binding="{Binding customerName, Mode=Default}" />
<DataGridTextColumn Binding="{Binding billingAddress, Mode=Default}"/>
<m:MultiColumnComboBox.Style>
<Style>
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=chk1, Path=IsChecked}" Value="True">
<Setter TargetName="colID" Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=chk1, Path=IsChecked}" Value="False">
<Setter TargetName="colID" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</m:MultiColumnComboBox.Style>
</m:MultiColumnComboBox>
但它告诉我无法找到colID。
答案 0 :(得分:1)
修改强>
好的,这是如何使这件事起作用的技巧:
public class VisibilityToBoolean : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (Visibility) value == Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool) value ? Visibility.Visible : Visibility.Collapsed;
}
}
<RadioButton
IsChecked="{Binding ElementName=cboCustomer,
Path=Columns[0].Visibility,
Converter={StaticResource boolToVis},
Mode=OneWayToSource}"
... />
RadioButton
(之前的所有建议都是错误的,因为DataGridTextColumn不是逻辑树的一部分,它没有DataContext属性,因此无需尝试将其属性绑定到任何地方)