【问题标题】:How to access WPF control properties outside of main class如何访问主类之外的 WPF 控件属性
【发布时间】:2020-03-12 00:02:39
【问题描述】:

我有一个在应用程序启动时调用的“公共静态”类。在这个类中,我试图设置几个复选框的“IsEnabled”和“IsChecked”属性。我在 MainWindow.xaml.cs 中执行此操作没有问题,但是当我尝试在自定义类中引用复选框时,复选框名称无法在 Intellisense/自动完成中解析。我还收到错误消息“当前上下文中不存在名称‘cbx_NameOfMyBox’”

如何访问 MainWindow.xaml.cs 之外的控件属性?

namespace Widget
{
    public static class StartupSequence
    {
        public static void Begin()
        {
            GetDomain.Start();
            cbx_GpoUpdate.IsEnabled = false;


            return;

        }
    }
}

【问题讨论】:

  • 不要使用静态数据来共享数据。如果您需要共享数据,WPF 有 App.XAML 用于此。
  • 另外,我的 MVVM 是时候免责声明了:WPF/UWP 和 XAML 的设计考虑了 MVVM 模式。虽然您可以使用其他模式和方法,但这样做会遗漏大约 90% 的功能,并且会在任何其他角落遇到问题​​。也不是很多人能够帮助你。 |几年前我写了一篇关于 MVVM 的简短介绍:social.msdn.microsoft.com/Forums/vstudio/en-US/…
  • 您的StartupSequenceMainWindow 不在同一个程序集中吗?默认情况下,命名控件是内部字段,因此您无法从不同的程序集访问它们。我也是 @Christopher 对 MVVM 的第二次投票。如果您真的想继续使用这种方法,您可以创建一个返回命名控件的公共属性。但是请注意,这种代码在 WPF 中被认为是一种强烈的气味。
  • 谢谢大家,我想我会研究 MVVM 并试一试。

标签: c# wpf properties controls


【解决方案1】:

建议:

  1. 您需要实现 MVVM 并绑定数据。
  2. 如果您打算使用静态类来共享数据,那么我建议使用单例类。你不应该使类静态。您应该将类​​的构造函数设为私有。然后,创建一个可以返回您的类的静态属性。 (只需做一些谷歌搜索以了解单身人士)

解决您的问题(作为快速解决方案):

你在做相反的事情。静态属性的主要目的是可以从项目中的任何地方访问它(前提是正确引用了命名空间)。因此,不要尝试从静态类访问您的控件,而是以另一种方式进行。在您的 xaml.cs(控件的代码后面)中,例如在加载或启动控件时或在合适的地方添加类似,

cbx_GpoUpdate.IsEnabled = StartupSequence.your_boolean_property_for_this

您需要在静态类中有一个布尔属性来存储所需的数据,并且在启动控件时引用它。您还可以为不同的控件创建不同的其他属性,并且在每个控件的代码中,您可以在加载它们或单击按钮或任何其他事件场景时引用它们。

注意:我完全按照您的方式开始(在后面的代码中),但经过几个月的项目和之后的项目,我发现 MVVM 模式最适合 WPF。现在,连续 3 年,我所有的项目都在 MVVM 中。开始学习 MVVM 并尽快转向它。干杯。

【讨论】:

  • 谢谢你!
猜你喜欢
  • 1970-01-01
  • 2014-09-15
  • 2013-03-26
  • 2010-10-20
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多