WPF:在触发器中设置 Clr 属性
本文关键字:设置 Clr 属性 触发器 WPF | 更新日期: 2023-09-27 18:34:40
我有一个TextBox
,并希望在可见性更改时将视图模型中的 CLR 属性设置为视图模型中的另一个属性。
<TextBox Text="{Binding Property1}">
<TextBox.Style>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Trigger.Setters>
///Set Property1 = Property2
</Trigger.Setters>
</Trigger>
</Style>
</TextBox>
有什么办法可以做到这一点吗?
使用中间DependencyProperty
和右BindingMode
组合来达到您想要的结果:
<TextBox Text="{Binding Property1}">
<TextBox.Style>
<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<Trigger Property="Visbility" Value="Collapsed">
<Trigger.Setters>
<Setter Property="Tag" Value="{Binding Property2}" />
<Setter Property="Tag" Value="{Binding Mode=OneWayToSource,Path=property1}" />
</Trigger.Setters>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
我假设您想在 property1 中设置 property2(也是 CLR 属性(的值,这将最终设置 TextBox
的Text
属性。
可能有一种方法可以做到这一点。将文本框的可见性绑定到 VM 的 clr 属性,并在 clr 可见性属性的数据库中更改属性 1 的值
<TextBox Text="{Binding Property1}" Visibility="{Binding Visibility, Converter={StaticResource ResourceKey=boolConvertor}}"></TextBox>
并在虚拟机中
public bool Visibility
{
get { return visibility; }
set
{
visibility = value;
if (visibility == false)
{
Property1 = Property2;
}
OnPropertyChanged();
}
}