【问题标题】:Bind to an App property in a different project绑定到不同项目中的 App 属性
【发布时间】:2016-01-24 17:59:41
【问题描述】:

这是一个 WPF 问题。我的解决方案中有两个项目,比如 ProjectA 和 ProjectB,其中 ProjectB 引用 ProjectA。在 ProjectA App.cs 类中,我声明了一个属性 PropA(公共和静态)。我的问题是:如何从 ProjectB 中的 XAML 绑定到 PropA?

显然

{Binding PropA,Source={x:Static Application.Current}}

不起作用,我无法解决这个问题。任何帮助将不胜感激!

更新

为了澄清任何混淆,这里有一些细节。 ProjectA 包含需要更新 App 级别集合的 ViewModel 类。我的问题是从 ProjectB 的窗口绑定到 XAML 中的集合。我最终通过将集合移动到 ProjectB App 类并从 ProjectA 中的 ViewModel 触发事件来解决这个问题。然后,在窗口的代码隐藏中(我将 ViewModel 的一个实例设置为数据上下文),我只需订阅事件并采取相应的行动。 MVVM 纯粹主义者现在可能会变绿,但一点代码隐藏永远不会受到伤害!

【问题讨论】:

  • 好的,您引用了 ProjectA,但您是否创建了 ProjectA.App 的实例?绑定需要源对象。
  • 是的,实例创建得很好。
  • 如果你已经创建了一个实例,你只需要在你的绑定中引用那个实例。看我的回答。
  • 您是否尝试在两个应用程序之间共享实际绑定的数据?

标签: c# wpf


【解决方案1】:

你不能。您将需要一个反之亦然的引用,并且此循环引用对 C# 无效。

您可以将其提取到第三个项目中并让其他两个项目使用它。

【讨论】:

  • 我是这么认为的! :( 我想我将不得不使用另一个项目 - 或者想办法解决这个问题
  • ProjectA 在这里不需要引用 ProjectB。
【解决方案2】:

您不知何故需要对ProjectA.App 实例的引用。例如,您可以在 ProjectB.App 上拥有公共属性:

namespace ProjectB 
{
    public partial class App : Application 
    {
        ...

        // this public property exposes an instance of ProjectA.App
        public ProjectA.App TheOtherApp ...

        ...
    }
}

然后你已经绑定到它了:

{Binding TheOtherApp.PropA, Source={x:Static Application.Current}}

【讨论】:

  • @GeysserSdz 哎呀,我的绑定示例错误,刚刚更正。
猜你喜欢
  • 2010-12-31
  • 2017-09-18
  • 2019-09-29
  • 2020-08-02
  • 1970-01-01
  • 2018-03-18
  • 2015-03-07
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多