【问题标题】:Static resource constructor with parameters带参数的静态资源构造函数
【发布时间】:2012-04-27 19:53:22
【问题描述】:

我必须在我的 XAML 文件中创建一个静态资源。

<Window.Resources>
    <vm:ViewModel x:Key="viewModel" />
</Window.Resources>

我需要这个静态资源来为我的组合框获取项目

ItemsSource="{Binding Source={StaticResource viewModel}, Path=GetItems, Mode=TwoWay}"

但是我怎样才能给 ViewModel(构造函数)一个我的代码实例呢?

【问题讨论】:

  • 为什么您的 ViewModel 需要类后面的代码实例?

标签: c# wpf constructor staticresource


【解决方案1】:

如果我理解正确,您违反了 MVVM 模式。 您永远不应该将 ComboBox 中的项目提供到您的 VM 中。您应该从您的 VM 中提供项目并将其绑定到 Combobox,并且您在访问这些项目时不会遇到问题。

【讨论】:

    【解决方案2】:

    据我了解,您希望根据 MVVM 模式绑定您的视图和视图模型。

    您不应该直接在您的视图中引用您的视图模型,否则它们之间会有很强的耦合。根据 MVVM 模式,你应该通过 DataContext 耦合它们

    在后面的代码中(例如在文件 App.xaml.cs 中)看起来像这样

    yourWindow.DataContext = yourViewModel
    

    然后在您的 viewmodel 类中,您将拥有一个名为 GetItems

    的属性

    最后在您的窗口中将您的列表框绑定到 GetItems

    ItemsSource="{Binding GetItems, Mode=TwoWay}"
    

    【讨论】:

      【解决方案3】:

      嗯,你可以通过代码来完成,我的意思是所有事情都来自代码,或者你可以 尝试(取决于您的应用程序的架构方式),使用ObjectDataProvider

      例如:

      <ObjectDataProvider ObjectType="{x:Type ViewModel}"  x:Key="viewModel">
            <ObjectDataProvider.ConstructorParameters>
                      <StaticResource ResourceKey="dataProvider"/>
             </ObjectDataProvider.ConstructorParameters>
      </ObjectDataProvider >
      

      在这种情况下,传递给 povoder ctor 的参数自然也必须是资源。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 2019-04-25
        • 2011-04-19
        • 1970-01-01
        • 2012-12-20
        • 2011-11-29
        相关资源
        最近更新 更多