我正在使用MVVM处理Windows 8商店应用程序。 对我的要求是创建一个动态调查页面,根据问题类型(多选,单选,文本框或评级按钮),我必须显示具有该值的用户的答案。
我的问题是:
如何在视图中显示动态控件。 我应该在View Model cs文件或View的Cs文件中创建动态控件。
请提供一些建议。
感谢阅读
此致
六必居
答案 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