我正在尝试使用MVVM创建用户控件。 基本上我试图包装一个将从存储库中提取数据的组合框。这将允许我在我的应用程序中的许多不同视图中使用相同的组合框。在整个应用过程中会有许多包裹的组合框。
我可以使用DependencyProperty和代码隐藏来轻松创建此控件。我现在正在尝试将其转换为MVVM,并且无法弄清楚如何将值返回到ViewModel或从ViewModel返回到绑定到我的组合框所在的View。
此时,我们将非常感谢任何想法或建议。
谢谢, 埃里克
答案 0 :(得分:1)
如果你有一个将从存储库中提取数据的viewmodel - 你可以在应用程序的许多不同视图模型中使用相同的viewmodel:)
如果你使用datatemplate你的视图知道如何渲染这个viewmodel
<DataTemplate DataType="{x:Type local:MyPullDataViewmodel}">
<view:MyCoolPullDataShowComboboxUserControl />
</DataTemplate>
答案 1 :(得分:1)
在使用MVVM时,使用其中包含代码的UserControl
是完全可以接受的。如果您确实想要将功能移出UserControl
,请将其移动到任何父视图模型将需要它。如果您不希望在多个位置重复使用相同的代码,则可以将其封装在类中,并将该类的实例作为属性添加到每个相关的视图模型中。
答案 2 :(得分:0)
这很容易。
假设你有:
MyUserControlView.xaml
MYUserControlViewModel.cs
MyMainWindowView.xaml
- 适用于您的MainWindow视图(包含UserControl
的视图)
MyMainWindowViewModel.cs
- 您的MainWindow ViewModel。
你想绑定List<string> MyListToBind
并将代码隐藏完全清空。
public class MyUserControlViewModel
{
private List<string> _MyListToBind;
public List<string> MyListToBind { get; set;}
}
public class MyUserControlViewModel
{
private MyUserControlViewModel _MyControlViewModel;
public MyUserControlViewModel MyControlViewModel { get; set;}
}
<Window ...
xmlns:my="clr-namespace:NamespaceContainingYourUserControlView>
<my:MyUserControlView DataContext = "{Binding Path= MyControlViewModel}"/>
</Window>
<UserControl ...>
<DataGrid ItemsSource = "{Binding Path= MyListToBind}" .../>
...
</DataGrid>
</UserControl>
DependencyProperties
而不是正常变量(就像我做的那样)或使用INotifyPropertyChanged
(google it,你会得到大量的例子)和OnPropertyChanged
事件DataTemplates
它们在数据绑定中非常有用。你可以找到这个usefeul:
http://www.youtube.com/watch?v=BClf7GZR0DQ
我确定到底了! 祝你好运。