C# 如何在mvvm模式中定义usercontrols?
我在应用程序中使用mvvm。我想知道如何在mvvm模式中定义我的用户控件C# 如何在mvvm模式中定义usercontrols?,c#,wpf,mvvm,user-controls,C#,Wpf,Mvvm,User Controls,我在应用程序中使用mvvm。我想知道如何在mvvm模式中定义我的用户控件 我必须使用from mvvm来定义它,还是可以一般地定义它?我认为这取决于用户控件。用户控件可以只是一个视图,在这种情况下,您可以组成一个更大的控件或页面,其中包含此用户控件作为整体的一部分。较大的控件或页面将为此视图提供视图和视图模型部分 或者您可以创建一个包含所有mvvm的自包含用户控件,并使用事件与它所属的较大用户控件进行交互 我怀疑使用第二种方法可以获得更好的重用和模块化 简而言之:这取决于。我认为这取决于用户控件
我必须使用from mvvm来定义它,还是可以一般地定义它?我认为这取决于用户控件。用户控件可以只是一个视图,在这种情况下,您可以组成一个更大的控件或页面,其中包含此用户控件作为整体的一部分。较大的控件或页面将为此视图提供视图和视图模型部分 或者您可以创建一个包含所有mvvm的自包含用户控件,并使用事件与它所属的较大用户控件进行交互 我怀疑使用第二种方法可以获得更好的重用和模块化
简而言之:这取决于。我认为这取决于用户控件。用户控件可以只是一个视图,在这种情况下,您可以组成一个更大的控件或页面,其中包含此用户控件作为整体的一部分。较大的控件或页面将为此视图提供视图和视图模型部分 或者您可以创建一个包含所有mvvm的自包含用户控件,并使用事件与它所属的较大用户控件进行交互 我怀疑使用第二种方法可以获得更好的重用和模块化
简而言之:这取决于具体情况。让我们调用嵌入用户控件主窗口的控件和用户控件UserControl。因为您处于MVVM模式,所以外部视图至少有一个视图模型-我通常使用名称MainVm。 用户控件有两种选择:它们可以共享相同的视图模型,或者您可以有一个子视图模型,仅用于用户控件,即UserVm 对于你的第一选择,你什么都不做。您可以定义UserControl(VisualStudio“添加新项”->UserControl是一个很好的开始)。然后,您只需将其嵌入主窗口
<Window
x:Class="SO.MainWindow"
...
xmlns:src="clr-namespace:SO"
...
>
...
<src:UserControl />
...
</Window>
...
...
UserControl将从MainWindow继承相同的DataContext,并像在MainWindow中一样执行所有{Binding}
如果您想要一个子视图模型(UserVm)——它通常是MainVm的公共属性(比如UserVm)。在这种情况下,您将在引用UserControl时设置其DataContext
<src:UserControl DataContext="{Binding Path=userVm}" />
另一个流行的范例是声明DataTemplate而不是UserControl。如果这样做,您只需要将UserVm放入(在XAML中实例化它,或者通过绑定):
...
...
让我们调用嵌入用户控件主窗口的控件和用户控件UserControl。因为您处于MVVM模式,所以外部视图至少有一个视图模型-我通常使用名称MainVm。
用户控件有两种选择:它们可以共享相同的视图模型,或者您可以有一个子视图模型,仅用于用户控件,即UserVm
对于你的第一选择,你什么都不做。您可以定义UserControl(VisualStudio“添加新项”->UserControl是一个很好的开始)。然后,您只需将其嵌入主窗口
<Window
x:Class="SO.MainWindow"
...
xmlns:src="clr-namespace:SO"
...
>
...
<src:UserControl />
...
</Window>
...
...
UserControl将从MainWindow继承相同的DataContext,并像在MainWindow中一样执行所有{Binding}
如果您想要一个子视图模型(UserVm)——它通常是MainVm的公共属性(比如UserVm)。在这种情况下,您将在引用UserControl时设置其DataContext
<src:UserControl DataContext="{Binding Path=userVm}" />
另一个流行的范例是声明DataTemplate而不是UserControl。如果这样做,您只需要将UserVm放入(在XAML中实例化它,或者通过绑定):
...
...
如果我在定义我的控件时使用from mvvm…我如何使用from我的控件?如何将属性绑定到xaml代码中的控件Viewmodel?控件的xaml将绑定到它的视图模型。外部模型(较大控件的模型)的工作是创建内部视图模型,并将其传递到内部视图/控件的实例中。如果我在定义控件时使用from mvvm…我如何使用from我的控件?如何将属性绑定到xaml代码中的控件Viewmodel?控件的xaml将绑定到它的视图模型。外部模型(较大控件的模型)的任务是创建内部视图模型并将其传递到内部视图/控件的实例中。在视图模型中定义usercontrol引用不违反mvvm设计模式。在视图模型中定义usercontrol引用不违反mvvm设计模式。