【问题标题】:Binding to a property in another namespace?绑定到另一个命名空间中的属性?
【发布时间】:2016-02-11 17:53:52
【问题描述】:

我在主题 xaml 文件中有一个样式设置器。我正在尝试将 Setter 的值绑定到视图模型中的 bool peoperty。

我已经在主题中获得了视图模型的命名空间:

 xmlns:propertyGrid="clr-namespace:MY.App.Controls.PropertyGrid;assembly=MY.APP.Controls"

以及样式中的绑定:

<Setter Property="IsExpanded" Value="{Binding Source={StaticResource propertyGrid:PropertyGridViewModel}, Path=AreCategoriesAutoExpanded}"/>

最后在视图模型中我只有一个自动属性:

public bool AreCategoriesAutoExpanded { get; set; }

但是我在运行时遇到异常:

Cannot find resource named 'propertyGrid:PropertyGridViewModel'. Resource names are case sensitive

如果我尝试使用动态资源资源,我只能绑定到 dp。这个绑定有什么问题?我有什么遗漏吗?

【问题讨论】:

  • 检查程序集名称和命名空间的大小写,是否正确?在命名空间中是它的 App,你的程序集是它的 APP。也许这只是像那样愚蠢的事情。另外,删除 StaticResource 部分,只使用 {Binding propertyGrid:PropertyGridViewModel}
  • PropertyGridViewModel 是静态类吗?我认为由于您使用的是StaticResource,它会查找该名称的公共静态类,其中包含AreCategoriesAutoExpanded 的公共静态属性
  • 把你的类“PropertyGridViewModel”代码
  • 你需要在使用前以类似'的方式声明你的viewModel。然后你可以将它引用为'Value="{Binding Source={StaticResource viewModel}}"'。但是这样一来,你就失去了对viewmodel对象的控制权,也就意味着你很难得到对象的引用。

标签: c# wpf xaml mvvm


【解决方案1】:

这仅在您的 ViewModel 是具有静态属性的静态类时才有效,如下所示:

<Setter Property="IsExpanded" Value="{Binding Source={x:Static propertyGrid:PropertyGridViewModel.AreCategoriesAutoExpanded}"/>

您缺少“x:Static”位,应该可以修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 2014-11-20
    • 2012-05-27
    • 2010-11-14
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多