【问题标题】:Wpf: Set Clr property in a TriggerWpf:在触发器中设置 Clr 属性
【发布时间】:2016-02-15 10:29:52
【问题描述】:

我有一个TextBox,想在可见性更改时将 ViewModel 中的 CLR 属性设置为 ViewModel 中的另一个属性。

<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 (+mvvm) 中,通常通过 BoolToVisibility 转换器 (click) 将视图元素的 Visibility 属性绑定到视图模型的 bool 属性来完成。

标签: c# wpf xaml datatrigger


【解决方案1】:

使用中间人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属性。

【讨论】:

  • 这会将 Property1 最初设置为 null,因为 Tag 具有 null 值,因此此解决方案对我不起作用
  • @VivekSaurav 所以我虽然你正在尝试做对吗?还更新了样式以设置绑定行为。
【解决方案2】:

有办法做到这一点。您将 TextBox 的可见性绑定到 VM 的 clr 属性,并在 clr 可见性属性的设置器中更改 Property1 的值

<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();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 2013-02-16
    • 2011-08-04
    • 2021-11-08
    • 2012-09-24
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多