按模型值设置元素可见性

时间:2013-05-27 08:25:46

标签: c# wpf binding visibility

我想根据绑定设置TextBox元素的可见性 例: 包含两种产品价格值的TextBoxes

<TextBox Grid.Column="1" Grid.Row="3" Text="{Binding PriceProduct0, Mode=TwoWay}" />
<TextBox Grid.Column="2" Grid.Row="3" Text="{Binding PriceProduct1, Mode=TwoWay}" />

在我的模型中,我从WCF服务查询必要的值并调用NotifyPropertyChanged来更新我的视图。
问题:在某些情况下,我的属性没有值。在这种情况下,我想隐藏UI元素。有没有一种简单的方法,也许通过举办活动?

大多数属性是double或boolean,所以我不能将它们设置为NULL。

解决方案:
感谢Ahmed和DHN,我找到了解决办法! 这里所有步骤:

  1. 将所有不可为空的属性更改为nullables,例如 public double? PriceProduct0
  2. 如果找不到命名空间,请添加对以下.dll的引用 Microsoft.TeamFoundation.Controls.WPF.Converters
    <VSHome>\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.Controls.dll
  3. xmlns:myConverters="clr-namespace:Microsoft.TeamFoundation.Controls.WPF.Converters;assembly=Microsoft.TeamFoundation.Controls"添加到<Page>属性
  4. 添加 <Page.Resources>
    <myConverters:NullToVisibleConverter x:Key="NullToVisibleConverter" />
    </Page.Resources>
  5. 将以下可见性参数添加到<TextBox>属性:
    Visibility="{Binding PriceProduct0, Converter={StaticResource NullToVisibleConverter}, ConverterParameter='invert' }"

2 个答案:

答案 0 :(得分:4)

您可以使用null来查看转换器。见link

<TextBox Text="{Binding PriceProduct0}" Visibility="{Binding PriceProduct0, Mode=TwoWay, Converter={StaticResource NullToVisibilityConverter}}"/>

答案 1 :(得分:1)

没有比这更容易了。只需NullToVisibleConverter并将其绑定到UI元素的Visibility属性。 E.g。

<Window>
    <Window.Resources>
        <NullToVisibleConverter x:Key="Null2VisConv"/>
    </Window.Resources>
<TextBox Visibility="{Binding PriceProduct0, Converter={StaticResource Null2VisConv}}" .../>
</Window>