我有一个使用 MVVM Light 的 WPF 应用程序。在一个 View 中,我得到了许多使用相同可见性绑定(bind)的控件。因为我不喜欢将我的长绑定(bind)路径插入到每个控件。我想使用资源...
<SomeControl>
<SomeControl.Resource>
<Visibility x:Key="myVisibilityResource" >
<Binding Path="somePath" Converter="BoolToVisibilityConverter"></Binding>
</Visibility>
</SomeControl.Resource>
<SomeControl>
在这个版本中,我得到了可见性不支持直接内容的错误。我必须这样写:
<Visibility x:Key="myVisibilityResource" >
Collapsed
</Visibility>
有任何想法吗?
最佳答案
如果您只想在 XAML 中写入“可见”或“已折叠”(如上一个示例所示),您可以通过绑定(bind)到 ObjectDataProvider
来实现。这是使用 Enum.Parse
解析给定的文本(可以是“可见”、“折叠”或“隐藏”):
<Grid xmlns:sys="clr-namespace:System;assembly=mscorlib" >
<Grid.Resources>
<ObjectDataProvider x:Key="visibilityProvider"
MethodName="Parse"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="Visibility" />
<sys:String>Visible</sys:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Grid.Resources>
<Button x:Name="button1" Visibility="{Binding Source={StaticResource visibilityProvider}}" />
</Grid>
在上面的代码中,我使用了
ObjectDataProvider
返回 Visibility
枚举。 ObjectDataProvider
来电Enum.Parse
绑定(bind)时。按钮的Visibility
属性绑定(bind)到 ObjectDataProvider
.MethodParameters
属性指定 Enum.Parse
的参数.不幸的是没有办法绑定(bind)
MethodParameters
直接连接到底层 ViewModel。如果你想这样做,我想你可以自己写ObjectDataProvider
或者您可以使用自己的类/方法而不是 Enum.Parse
返回正确的 Visibility
值(value)。
关于具有绑定(bind)的 WPF 可见性资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105902/