ComboBox 项目更改的 WPF DataTrigger

WPF DataTrigger for ComboBox Item Change

我在 XAML

中设计了一个联系人框
<DataTemplate>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <ComboBox Grid.Column="0" SelectedItem="{Binding Type, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">
            <ComboBoxItem Content="1">Mobile</ComboBoxItem>
            <ComboBoxItem Content="2">Phone</ComboBoxItem>
        </ComboBox>
        <TextBox Text="{Binding Contact, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
    </Grid>
</DataTemplate>

属性是

public int Type { get; set; }
public string Contact { get; set; }

Type is ZERO 的初始值(即 Type = 0;)。

实施条件:

  1. 如果 Type 等于 1 或 2,那么我需要启用文本框 - IsEnabled = True
  2. 如果类型为 1,则 TextBox.MaxLength 应为 10
  3. 如果Type是2,那么TextBox.MaxLength应该是11

我尝试了以下代码:

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=Type}" Value="0">
        <Setter Property="TextBox.IsEnabled" Value="False" />
    </DataTrigger>

    <DataTrigger Binding="{Binding Path=Type}" Value="1">
        <Setter Property="TextBox.MaxLength" Value="10" />
    </DataTrigger>

    <DataTrigger Binding="{Binding Path=Type}" Value="2">
        <Setter Property="TextBox.MaxLength" Value="11" />
    </DataTrigger>
</DataTemplate.Triggers>

但是上面的代码不起作用。请帮助我如何在 DataTemplate.

中实现 DataTrigger 中的逻辑

您的 TextBox 可以具有带有 DataTriggers 的样式:

<TextBox Text="{Binding Contact, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Type}" Value="0">
                    <Setter Property="IsEnabled" Value="False" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Type}" Value="1">
                    <Setter Property="MaxLength" Value="10" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Type}" Value="2">
                    <Setter Property="MaxLength" Value="11" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

如果 Type 属性 在实例化 DataTemplate 后要更改其值,则拥有 class 需要实现 INotifyPropertyChanged 接口。