以编程方式创建文本块

本文关键字:文本 创建 方式 编程 | 更新日期: 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总是来自数据库,那么绑定在哪里定义?也在数据库中?如果是,您在视图模型中实现的实际逻辑是什么?换句话说:如果没有自定义逻辑,那么虚拟机的意义何在。在这种情况下,我建议使用仅查看的方法。如果您需要自定义逻辑,请使用我上面描述的代码背后的方法。