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>

有什么办法可以做到这一点吗?

WPF:在触发器中设置 Clr 属性

使用中间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 属性(的值,这将最终设置 TextBoxText属性。

可能有一种方法可以做到这一点。将文本框的可见性绑定到 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();
        }
    }