Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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
C# 如何在mvvm模式中定义usercontrols?_C#_Wpf_Mvvm_User Controls - Fatal编程技术网

C# 如何在mvvm模式中定义usercontrols?

C# 如何在mvvm模式中定义usercontrols?,c#,wpf,mvvm,user-controls,C#,Wpf,Mvvm,User Controls,我在应用程序中使用mvvm。我想知道如何在mvvm模式中定义我的用户控件 我必须使用from mvvm来定义它,还是可以一般地定义它?我认为这取决于用户控件。用户控件可以只是一个视图,在这种情况下,您可以组成一个更大的控件或页面,其中包含此用户控件作为整体的一部分。较大的控件或页面将为此视图提供视图和视图模型部分 或者您可以创建一个包含所有mvvm的自包含用户控件,并使用事件与它所属的较大用户控件进行交互 我怀疑使用第二种方法可以获得更好的重用和模块化 简而言之:这取决于。我认为这取决于用户控件

我在应用程序中使用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设计模式。