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

时间:2014-06-23 18:03:08

标签: wpf

我的理解是,当你接受观点并说:     myView.DataContext = myViewModel;

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我的假设是为View设置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;
    }

数据绑定IsChecked =&#34; {绑定OSHPD}&#34;当事件Checked =&#34; OSHPD_Checked&#34;正在击中ViewModel未选中=&#34; OSHPD_Unchecked&#34;引用后面的Views代码。

答案 2 :(得分:0)

后面的View代码中的大多数内容也可以包含在ValueConverter,Behavior或AttachedProperty中。其中每个都能够访问控制级属性。通常,您可以使用颜色/画笔/形状和其他视图特定数据等值来提供这些值,以便在您确实发现需要重用它时保持valueConverter / behavior / AttachedProperty通用。