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您将不会出现在ViewModel上的UI函数放在哪里_Wpf - Fatal编程技术网

WPF MVVM您将不会出现在ViewModel上的UI函数放在哪里

WPF MVVM您将不会出现在ViewModel上的UI函数放在哪里,wpf,Wpf,我的理解是,当你采取你的观点并说: myView.DataContext=myViewModel 你是在分配它应该引用的类,就像大多数应用程序中的代码一样。我一直很喜欢这个设计,但是在哪里放置真正不属于视图模型的显示类型逻辑是最好的呢?例如,假设您正在根据项目的状态修改项目的上下文菜单。过去我用转换器处理过不同的显示功能。我本来打算使用Views本机代码,但后来我意识到我没有访问权限,是吗?通常列表中的每个项目都有一个模型对象。然后将每个模型包装到视图模型中。然后,视图模型将公开您描述的颜色、字

我的理解是,当你采取你的观点并说: myView.DataContext=myViewModel


你是在分配它应该引用的类,就像大多数应用程序中的代码一样。我一直很喜欢这个设计,但是在哪里放置真正不属于视图模型的显示类型逻辑是最好的呢?例如,假设您正在根据项目的状态修改项目的上下文菜单。过去我用转换器处理过不同的显示功能。我本来打算使用Views本机代码,但后来我意识到我没有访问权限,是吗?

通常列表中的每个项目都有一个模型对象。然后将每个模型包装到视图模型中。然后,视图模型将公开您描述的颜色、字体等属性的属性,并发出属性更改通知。希望这会有所帮助。

我认为为视图设置DataContext与将其指向不同的代码隐藏文件是一样的,这是不正确的。DataContext用于绑定目的。您仍然可以在普通代码中引用方法,如下所示:

<CheckBox Margin="5,0,30,0" 
                         x:Name="OSHPD" IsChecked="{Binding OSHPD}" 
                         Validation.ErrorTemplate="{x:Null}" Checked="OSHPD_Checked" Unchecked="OSHPD_Unchecked">OSHPD Approval</CheckBox>

private void OSHPD_Checked(object sender, RoutedEventArgs e)
    {
        FM.IsEnabled = false;

    }
    private void OSHPD_Unchecked(object sender, RoutedEventArgs e)
    {
        FM.IsEnabled = true;
    }

Databinding IsChecked={Binding OSHPD}正在访问ViewModel,而选中的事件=OSHPD\u Checked Unchecked=OSHPD\u Unchecked引用了视图的代码隐藏。

视图代码隐藏中的大多数内容也可以包含在值转换器、行为或AttachedProperty中。其中每一个都将能够访问控制级属性。通常情况下,您可以为这些属性提供颜色/画笔/形状等值以及其他视图特定数据,以便在确实需要重复使用时保持值转换器/行为/附件属性的通用性。

特定问题获得特定答案。所以回答你的问题,就像你问的那样,嗯。。。把它放在某个地方。ContextMenu只是一堆ICommands。我不明白为什么这些不属于ViewModel…在使用MVVM时,将视图特定的代码放在视图后面的代码中没有错,但是在基于选定项修改ContextMenu命令的情况下,听起来它应该属于ViewModel:上下文菜单可能是一个坏例子。比如说,我有一张物品清单。我的viewmodel将与这些项目一起显示状态。我希望视图根据该状态呈现某些内容,如绘制此形状和更改这些颜色等。它不应该出现在ViewModel中,但我不知道如何在视图的实际代码隐藏中引用函数,因为我更改了datacontext。我喜欢使用MVPVM-Model view Presenter视图模型。我的意思是让某些presenter类与视图交互来完成这类工作。通常作为附加行为。用最少的代码保持视图干净,并将控制逻辑封装在可重用的行为类中。我可以看到这一点,但它基本上只是一个UI视图模型。这样可以吗?例如,viewmodel还将具有一些属性来公开要在数据模板中绑定到的模型属性。