0

我的 WPF 页面上有一个单选按钮和一个组合框。这ComboBox是 normal 的自定义版本ComboBox,可以在下拉列表中显示多个列。IsChecked我想要的只是根据单选按钮的状态显示或隐藏某个列。我正在尝试使用 aDataTrigger来避免代码落后。

<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。

4

1 回答 1

1

编辑

好的,这是如何让这个东西工作的技巧:

  • 创建 VisibilityToBooleanConverter:
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 属性绑定到所需的列:
<RadioButton 
    IsChecked="{Binding ElementName=cboCustomer, 
             Path=Columns[0].Visibility, 
             Converter={StaticResource boolToVis}, 
             Mode=OneWayToSource}"
    ... />
  • 为每个列指定适当的索引RadioButton

(之前的所有建议都是错误的,因为这里的 DataGridTextColumn 不是逻辑树的一部分,并且它没有 DataContext 属性,因此尝试将其属性绑定到任何地方都没有用)

于 2013-02-21T15:47:14.357 回答