【发布时间】: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/…
-
您的
StartupSequence与MainWindow不在同一个程序集中吗?默认情况下,命名控件是内部字段,因此您无法从不同的程序集访问它们。我也是 @Christopher 对 MVVM 的第二次投票。如果您真的想继续使用这种方法,您可以创建一个返回命名控件的公共属性。但是请注意,这种代码在 WPF 中被认为是一种强烈的气味。 -
谢谢大家,我想我会研究 MVVM 并试一试。
标签: c# wpf properties controls