silverlight   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了wpf – 在MVVM中切换视图模式和编辑模式?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我是MVVM的新人,我决定继续开始在即将到来的项目中采用它. 我已经看过这个相关的问题和答案,但是我不知道如何用MVVM来实现. 我想要我的项目中的所有视图有两种模式,编辑模式和查看模式. 我不希望用户默认看到所有字段的TextBoxes,我宁愿让他们看到TextBlocks(或设置所有的TextBoxes作为IsReadOnly属性为true(通过风格等你告诉我..). 当用户打开实体时,通常应
@H_197_10@
我是MVVM的新人,我决定继续开始在即将到来的项目中采用它.

我已经看过这个相关的问题和答案,但是我不知道如何用MVVM来实现.

我想要我的项目中的所有视图有两种模式,编辑模式和查看模式.
我不希望用户认看到所有字段的TextBoxes,我宁愿让他们看到TextBlocks(或设置所有的TextBoxes作为IsReadOnly属性为true(通过风格等你告诉我..).

用户打开实体时,通常应该是TextBlocks,Labels(或readonly TextBoxes)等,如果他点击“Edit”(如果他有权限),则应该进入编辑模式,所有字段的标签应该反转为TextBoxes(RichTextBoxes等,ComboBoxes或任何其他可编辑的字段,不仅仅是标签).

我很确定我不是唯一有这个问题的人,我想听听专家们在纯MVVM之间切换这些模式的最有效的方式是什么,以及为它声明两个单独的视图是很常见的.

请参一篇很好的文章,解释如何做(可能是由Visual State?IDK完成).

updatE
我想知道什么,而不是如何,我的问题是关于模式,我应该分开编辑模式
从视图模式在V或VM?
所以请在你的答案中强调这个细节.

提前致谢.

解决方法

对于文本框使用IsReadOnly属性并将其绑定到“编辑模式”属性

<TextBox .... IsReadOnly={Binding Isviewmode} ... />

然后在你的视图模型:

public bool Isviewmode
{
    get { return _Isviewmode; }
    set
    {
        _Isviewmode= value;
        // Call NotifyPropertyChanged when the source property is updated.
        NotifyPropertyChanged("Isviewmode");
    }
}

Isviewmode认为true,当用户点击“编辑”时切换为false.绑定将立即使所有的文本框可以编辑.

您可以对其他控件执行相同操作 – 尽管在这些情况下,它将是您需要绑定的IsEnabled属性 – 尽管您将灰色控件.

要交换文本块和控件,您需要使两个控件在网格中共享相同的位置,并通过一对转换器由Isviewmode属性控制其可见性:

<TextBlock Grid.Row="1" Grid.column="2" ...
           Visiblity={Binding Isviewmode,Converter=DirectConverter} ... />
<ComboBox Grid.Row="1" Grid.column="2" ...
          Visiblity={Binding Isviewmode,Converter=InvertedConverter} ... />

直接转换器是:

return Isviewmode ? Visibility.Visible : Visibility.Collapsed;

反相转换器是:

return Isviewmode ? Visibility.Collapsed : Visibility.Visible;

大佬总结

以上是大佬教程为你收集整理的wpf – 在MVVM中切换视图模式和编辑模式?全部内容,希望文章能够帮你解决wpf – 在MVVM中切换视图模式和编辑模式?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。