Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 正在删除用于MVVM的UserControl代码_Wpf_Mvvm_Wpf Controls_Caliburn.micro - Fatal编程技术网

Wpf 正在删除用于MVVM的UserControl代码

Wpf 正在删除用于MVVM的UserControl代码,wpf,mvvm,wpf-controls,caliburn.micro,Wpf,Mvvm,Wpf Controls,Caliburn.micro,我正在尝试使用MVVM创建一个用户控件。 基本上,我试图包装一个组合框,它将从respository中提取数据。这将允许我在应用程序的许多不同视图中使用相同的组合框。在整个应用程序中将有许多包装好的组合框 我可以很容易地使用DependencyProperty和代码隐藏创建此控件。我现在正试图将其转换为MVVM,但我很难弄清楚如何从绑定到组合框所在视图的ViewModel中获取值 在这一点上,任何想法或建议都将不胜感激 谢谢, Eric如果您的viewmodel将从respository中提取数

我正在尝试使用MVVM创建一个用户控件。 基本上,我试图包装一个组合框,它将从respository中提取数据。这将允许我在应用程序的许多不同视图中使用相同的组合框。在整个应用程序中将有许多包装好的组合框

我可以很容易地使用DependencyProperty和代码隐藏创建此控件。我现在正试图将其转换为MVVM,但我很难弄清楚如何从绑定到组合框所在视图的ViewModel中获取值

在这一点上,任何想法或建议都将不胜感激

谢谢,
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>