【发布时间】:2014-04-19 18:40:07
【问题描述】:
我想以编程方式创建文本块 但似乎文件后面的代码没有构建它。
编辑
在 Main.cs 中
public Main()
{
InitializeComponent();
}
public void generateUI(TypeOne item)
{
// Create first element
TextBlock authorText = new TextBlock();
authorText.Text = "Saturday Morning";
authorText.FontSize = 12;
authorText.FontWeight = FontWeights.Bold;
gridUI.Children.Add(authorText);
}
Main.xml 内部
<Page.DataContext>
<ViewModels:MainWindowViewModel/>
</Page.DataContext>
<Grid Width="Auto" Background="WhiteSmoke" x:Name="grid">
<Grid x:Name="gridUI" Margin="0,68,0,-37">
</Grid>
</Grid>
MainWindowViewModel.cs 内部
Main genUI = new Main();
IEnumerable<TypeOne> generateUI = //query variable
from x in _txnType
where x.Description == selectedTypeOne
select x;
foreach (TypeOne ui in generateUI)
{
genUI.generateUI(ui);
}
但是 public void generateUI(TypeOne item) 没有创建文本块。 我想,Main.xml 无法读取它,因为 DataContext 设置为 MainViewModel.cs
请帮忙。
【问题讨论】:
-
ViewModel 应该只包含业务逻辑。它不应该有任何与 UI 相关的代码。您的代码完全违反了 MVVM 原则。
-
我的用户界面是动态的。 UI 的定义方式在我的数据库中。每个值都意味着什么。
-
积分仍然有效。 ViewModel 不应该知道 UI 的东西。动态 XAML 加载由 UI 负责,应仅在 UI 层中处理。
-
改为阅读 DataTemplates。
-
如果指示 UI 应该如何呈现的值在数据库中,你该怎么做?显然这应该以编程方式完成。如果您有更好的想法,请详细说明。