gpt4 book ai didi

c# - 在类似的 WPF 应用程序之间共享 View

转载 作者:行者123 更新时间:2023-12-03 10:28:13 27 4
gpt4 key购买 nike

我正在使用两个共享相同代码库并执行大致相同功能的 WPF 应用程序。 ApplicationA 面向高级用户,包含我们支持的每个功能的所有花里胡哨。 ApplicationB 更像是一个最终用户工具——它看起来基本相同,但一些更高级的功能对用户隐藏,以使事情尽可能简单。

这两个工具中有很多 View 几乎相同,唯一的区别是我们在 ApplicationB 中隐藏了一些控件。这些 View 非常相似,因此为每个工具维护一个单独的副本是没有意义的。我们的 View 模型知道它们在哪个应用程序中运行,因此我们目前通过将 View 元素的可见性绑定(bind)到 View 模型的属性来解决这个问题。

看法:

<SomeControl Visibility="{Binding Path=WhichApp}"> ...

查看型号:
public Visibility WhichApp
{
get
{
if (GetApp() == Apps.ApplicationB) return Visibility.Collapsed;
else return Visibility.Visible;
}
}

我不喜欢 View 模型负责处理可见性,这几乎是 View 的属性。这种方法还限制了我们的 View 模型在这两个工具之外的可重用性。

我对可以帮助我在两个项目之间共享 View 同时仍然保持 View 和 View 模型之间的关注点分离的任何替代解决方案感兴趣。

最佳答案

我同意这个对应用程序来说是全局的东西不应该包含在每个 ViewModel (DRY) 中。这种东西属于 App.xaml 中的静态资源(顺便说一句,这不是完成任何类型的全局设置的好方法,例如主题/皮肤、当前用户的权限/角色等)。

只需在 App.xaml 的 Application.Resources 类型的 Visibility 中创建一个静态资源,然后使用现有代码将其绑定(bind)到 App.xaml 中的代码隐藏。

现在,您有一个一次性计算和检索的、众所周知的位置来访问应用程序模式,并且您的 View 模型不必重新发明轮子。

关于c# - 在类似的 WPF 应用程序之间共享 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com