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;
)。
实施条件:
- 如果 Type 等于 1 或 2,那么我需要启用文本框 -
IsEnabled = True
- 如果类型为 1,则
TextBox.MaxLength
应为 10
- 如果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
接口。
我在 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;
)。
实施条件:
- 如果 Type 等于 1 或 2,那么我需要启用文本框 -
IsEnabled = True
- 如果类型为 1,则
TextBox.MaxLength
应为 10 - 如果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
接口。