以编程方式创建文本块
本文关键字:文本 创建 方式 编程 | 更新日期: 2023-09-27 17:59:06
我想以编程方式创建文本块但似乎文件背后的代码并没有构建它
编辑
内部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>
主窗口内部ViewModel.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);
}
但是公共void generateUI(TypeOne项)没有创建文本块。我想,Main.xml无法读取它,因为DataContext设置为MainViewModel.cs
请帮忙。
您想要遵循MVVM模式这一事实并不排除动态视图的创建。但是,我始终建议您在视图模型中使用"仅逻辑"。这意味着VM仍然只包含视图与之交互的逻辑,但对视图及其行为完全一无所知。
您的视图是使用视图模型的视图,应该动态调整视图。这意味着,在视图的代码隐藏中,您可以访问视图模型,并可以根据当前视图模型自定义视图。您也可以响应视图模型中的更改,因为视图模型将实现INotifyPropertyChanged(您可以像普通绑定一样在代码后面截取它)。
你应该问自己的问题是MVVM是否适合你。如果UI总是来自数据库,那么绑定在哪里定义?也在数据库中?如果是,您在视图模型中实现的实际逻辑是什么?换句话说:如果没有自定义逻辑,那么虚拟机的意义何在。在这种情况下,我建议使用仅查看的方法。如果您需要自定义逻辑,请使用我上面描述的代码背后的方法。