在MVVM窗口8中以动态方式生成控件

时间:2013-11-19 06:37:59

标签: c# mvvm

我正在使用MVVM处理Windows 8商店应用程序。 对我的要求是创建一个动态调查页面,根据问题类型(多选,单选,文本框或评级按钮),我必须显示具有该值的用户的答案。

我的问题是:

如何在视图中显示动态控件。 我应该在View Model cs文件或View的Cs文件中创建动态控件。

请提供一些建议。

感谢阅读

此致

六必居

1 个答案:

答案 0 :(得分:1)

1)例如我像这样使用ViewModel:

public enum AnswerType {OneAnswer, MultipleAnswers}

public class QuestionViewModel : ViewModel
{
    public AnswerType type;
    public string[] Answers;
}

2)查看职责 - 表示来自ViewModel的数据: 我在XAML中的空视图:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Class="AnswerView.cs"
    xmlns:local="clr-namespace:sdkControlTiltEffect"
    mc:Ignorable="d"
    d:DesignHeight="173" d:DesignWidth="173">
    <Grid x:Name="LayoutRoot">
    </Grid>
</UserControl>

我将ViewModel注入View作为构造函数参数。你cfn使用DataContext代替。 我的动态视图背景类:

public class AnswerView : UserControl
{
    public AnswerView(QuestionViewModel q)
    {
        switch(q.Type)
        {
            case AnswerType.OneAnswer:
            //Put log for jne answer view generation
            break;
            case AnswerType.MultipleAnswers:
            //Put logic for multiple answers View generation
            break;
            default:
        }

    }
}

您永远不应在ViewModel中创建视图元素。它破坏了MVVM的基础。 ViewModel必须独立于View。

我认为它应该有用: MVVM and dynamic generation of controls