【问题标题】:How to create instance of class in XAML?如何在 XAML 中创建类的实例?
【发布时间】:2023-03-31 06:59:01
【问题描述】:

我想创建没有可视元素的简单实用程序类并在 XAML 中创建它,以便我可以定义数据绑定。我尝试创建从DependencyObject 派生的类并在Window.Resources 部分创建它,但它不调用任何构造函数。

【问题讨论】:

  • 我找到了解决这个问题的方法——将FindResource("myClass"); 放在主窗体构造函数中。

标签: c# .net wpf xaml


【解决方案1】:

您可以在 app.xaml 中实例化您的类,只需将您的命名空间添加到其中

xmlns:yourNamespace="clr-namespace...."

智能感知很容易提供帮助。

然后在 Application.Resources 中创建你的类

<Application.Resources>
   <yourNamespace:YourClass x:Key="yourClassInstanteName" />      
</Application.Resources>

希望对你有帮助。

【讨论】:

  • 我做到了。问题是在运行时没有创建类实例(只是尝试在构造函数中删除断点)。
  • 看起来实例是在您实际使用它们时创建的
  • 是的,但是你的绑定正在使用它,所以它应该实例化它
  • 不,即使绑定源发生更改,它也不会被实例化。我认为绑定本身也没有实例化。
  • 您能分享一下您的 XAML 绑定吗,或者例如一个?只是好奇,因为您也以这种方式使用转换器并且它们可以工作。你用StaticResource绑定?
【解决方案2】:

看起来实例是在您实际使用它们时创建的。我找到了解决此问题的肮脏解决方法 - 将 FindResource("myClass"); 放在主窗体构造函数中。

【讨论】:

    【解决方案3】:

    我知道我正在发布一个旧问题,但我在尝试自己寻找答案时遇到了这个问题。大L贴的代码确实是正确的:

    xmlns:yourNamespace="clr-namespace...."
    

    在应用程序资源中放置一个副本:

    <Application.Resources>
       <yourNamespace:YourClass x:Key="yourClassInstanteName" />      
    </Application.Resources>
    

    此信息的另一个关键是该类需要具有默认构造函数。所以在 Class 源代码中你应该有一个这样的方法:

    public yourClassName()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      • 2014-05-02
      相关资源
      最近更新 更多