-1

我在 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,那么我需要启用 TextBox -IsEnabled = True
  2. 如果 Type 是 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>

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

4

1 回答 1

1

您的 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 后更改属性值,则所属类需要实现该INotifyPropertyChanged接口。

于 2016-09-07T07:45:54.920 回答