2

I have to create in my XAML file a static resource.

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

I need this static resource to get the items for my combobox

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

But how can I give the ViewModel (constructor) a instance of my code behind class?

4

3 回答 3

8

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

于 2012-04-27T10:53:19.290 回答
2

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

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

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

yourWindow.DataContext = yourViewModel

然后在您的视图模型类中,您将拥有一个名为GetItems的属性

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

ItemsSource="{Binding GetItems, Mode=TwoWay}"
于 2012-04-27T11:37:54.113 回答
0

好吧,您可以从代码中完成,我的意思是代码中的所有内容,或者您​​可以 尝试(取决于您的应用程序的架构方式),通过使用 ObjectDataProvider

例如:

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

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

于 2012-04-27T10:54:28.867 回答