具有绑定(bind)的 WPF 可见性资源

标签 wpf xaml resources visibility .net-4.5

我有一个使用 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/

相关文章:

c# - 如何发布带有数据库的 WPF

c# - WPF 验证未触发

c# - Marshal.Copy/UnlockBits 挂起

.net - Loose XAML 的局限性是什么?

java - Eclipse 插件开发以编程方式在工作区之外创建项目

c# - 本地化资源 .NET - 如何使它们保持同步?

wpf - 在 DataGrid 的选定行中设置元素的前景色

c# - 使用 Canvas 在 ItemsControl 上定位 XAML UI 元素

objective-c - 捆绑 pathsForResourcesOfType :inDirectory:

windows - MvvmCross Windows Phone 8.1 绑定(bind)列表选择到命令,编译失败