具有绑定的WPF可见性资源
我得到了一个使用MVVM Light的WPF应用程序。在一个视图中,我得到了许多使用相同可见性绑定的控件。因为我不喜欢将我的长绑定路径插入每个控件。我想使用一个资源具有绑定的WPF可见性资源,wpf,xaml,resources,visibility,.net-4.5,Wpf,Xaml,Resources,Visibility,.net 4.5,我得到了一个使用MVVM Light的WPF应用程序。在一个视图中,我得到了许多使用相同可见性绑定的控件。因为我不喜欢将我的长绑定路径插入每个控件。我想使用一个资源 <SomeControl> <SomeControl.Resource> <Visibility x:Key="myVisibilityResource" > <Binding Path="somePath" Converter="BoolToVisibility
<SomeControl>
<SomeControl.Resource>
<Visibility x:Key="myVisibilityResource" >
<Binding Path="somePath" Converter="BoolToVisibilityConverter"></Binding>
</Visibility>
</SomeControl.Resource>
<SomeControl>
在这个版本中,我得到的错误是可见性不支持直接内容。我必须这样写:
<Visibility x:Key="myVisibilityResource" >
Collapsed
</Visibility>
崩溃
有什么想法吗 如果您希望能够在XAML中写入“可见”或“折叠”(如上一个示例中所示),则可以通过绑定并使用它来解析给定文本(可以是“可见”、“折叠”或“隐藏”):
看得见的
在上面的代码中,我使用ObjectDataProvider
返回枚举。绑定时,ObjectDataProvider
调用Enum.Parse
。按钮的可见性
属性绑定到ObjectDataProvider
。
MethodParameters
属性指定Enum.Parse
的参数
不幸的是,没有办法将
MethodParameters
直接绑定到基础ViewModel。如果您想这样做,我想您可以编写自己的ObjectDataProvider
,或者您可以使用自己的类/方法而不是Enum.Parse
,后者返回正确的可见性
值。类似的内容如何?这并不完全是您所要求的,但是您将复制更少的代码,因为您不必每次都包含转换器
<UserControl>
<Grid>
<SomeElement x:Name="Master" Visibility="{Binding somePath, Converter={StaticResource BoolToVisibilityConverter}}" />
<SomeOtherElement Visibility="{Binding Visibility, ElementName=Master}" />
<SomeOtherElement Visibility="{Binding Visibility, ElementName=Master}" />
</Grid>
</UserControl>
在参考资料中创建样式:
<Style TargetType="Control" x:Key="VisibilityStyle">
<Setter Property="Visibility"
Value="{Binding Converter={StaticResource VisibleIfFalse}}"/>
</Style>
然后简单地添加对要隐藏/显示的项的引用
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
这也适用于网格的标题…您能将其定义为字符串并这样调用吗?这是一种资源
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>
<TextBlock Text="123" Style="{StaticResource VisibilityStyle}"/>