可能与IF ELSE语句绑定

时间:2018-03-10 02:19:18

标签: c# wpf

<TextBlock Text="{Binding Name}" />

如果Name为空或null,则使用NameOpt绑定 像这样:

<TextBlock Text="{Binding if Name ? Name : NameOpt}" />

2 个答案:

答案 0 :(得分:1)

您可以使用DataTriger来实现行为

<Style TargetType="TextBlock">
    <Setter Property="Text" Value="{Binding Name}"/>
    <Style.Triggers>
        <DataTrigger Binding="{Binding Name}" Value="{x:Null}">
           <Setter Property="Text" Value="{Binding NameOpt}"/>
       </DataTrigger>
    </Style.Triggers>
</Style>

答案 1 :(得分:1)

你可以使用DataTrigger并且没有什么可以阻止你,但这可能是一种不好的方法来进行绑定,特别是从MVVM的角度来看。 通常触发器用于根据XAML本身或VM中特定属性的条件更改属性。根据VM属性是否为null的状态,对属性进行动态绑定有点奇怪。

要完全从VM尝试这样做,您的视图应绑定到Name这样的单个属性:

<TextBlock Text="{Binding Name}" />

...在虚拟机的处理过程中执行以下操作:

public string Name { get ; set; } // TODO: add usual property changed stuff

void UpdateStuff()
{
    // perhaps update Name and NameOpt here
    // ...

    // Now update the exposed property
    Name ? Name : NameOpt
}