Wpf 正在删除用于MVVM的UserControl代码
我正在尝试使用MVVM创建一个用户控件。 基本上,我试图包装一个组合框,它将从respository中提取数据。这将允许我在应用程序的许多不同视图中使用相同的组合框。在整个应用程序中将有许多包装好的组合框 我可以很容易地使用DependencyProperty和代码隐藏创建此控件。我现在正试图将其转换为MVVM,但我很难弄清楚如何从绑定到组合框所在视图的ViewModel中获取值 在这一点上,任何想法或建议都将不胜感激 谢谢,Wpf 正在删除用于MVVM的UserControl代码,wpf,mvvm,wpf-controls,caliburn.micro,Wpf,Mvvm,Wpf Controls,Caliburn.micro,我正在尝试使用MVVM创建一个用户控件。 基本上,我试图包装一个组合框,它将从respository中提取数据。这将允许我在应用程序的许多不同视图中使用相同的组合框。在整个应用程序中将有许多包装好的组合框 我可以很容易地使用DependencyProperty和代码隐藏创建此控件。我现在正试图将其转换为MVVM,但我很难弄清楚如何从绑定到组合框所在视图的ViewModel中获取值 在这一点上,任何想法或建议都将不胜感激 谢谢, Eric如果您的viewmodel将从respository中提取数
Eric如果您的viewmodel将从respository中提取数据,则可以在应用程序中的许多不同viewmodel中使用相同的viewmodel:) 如果使用datatemplate,则视图知道如何渲染此viewmodel
<DataTemplate DataType="{x:Type local:MyPullDataViewmodel}">
<view:MyCoolPullDataShowComboboxUserControl />
</DataTemplate>
这很简单
假设你有:
MyUserControlView.xaml
MYUserControlViewModel.cs
MyMainWindowView.xaml
-用于主窗口视图(包含用户控件的视图)
MyMainWindowViewModel.cs
-您的主窗口视图模型
您想要绑定列表MyListToBind
并将代码完全留空
MyUserControlViewModel.cs
MyMainWindowView.xaml
在使用MVVM时,完全可以使用带有代码的用户控件。如果确实要将功能移出用户控件
,请将其移动到需要它的父视图模型。如果不希望在多个位置重复相同的代码,可以将其封装在一个类中,并将该类的实例作为属性添加到每个相关视图模型中 。在使用MVVM时,完全可以使用包含代码的UserControl
。如果确实要将功能移出控制范围,请将其移动到将使用该功能的父视图模型。你可以将它封装在一个类中,如果你担心的话,可以重用它。谢谢。我认为这就是我将要采取的路线。在这种情况下,我添加了我的略加扩展的注释作为答案,因此这是本网站的惯例。我了解INotifyPropertyChanged的工作原理,并且我了解如何将数据从MainViewModel绑定到UserControlViewModel,我不明白的是如何将MainViewModel中的属性绑定到UserControlView的子控件(在您的示例中为datagrid)的属性。我特别尝试将组合框中项目列表的键绑定回MainViewModel中的正确属性。
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>