0

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が見つからないことがわかります。

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 に答える