【问题标题】:create textblock programmatically以编程方式创建文本块
【发布时间】: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 应该如何呈现的值在数据库中,你该怎么做?显然这应该以编程方式完成。如果您有更好的想法,请详细说明。

标签: c# wpf xaml mvvm


【解决方案1】:

您想要遵循 MVVM 模式这一事实并不排除动态视图的创建。但是,我始终建议您在视图模型中使用“仅逻辑”。这意味着 VM 仍然只包含与视图交互的逻辑,但对视图及其行为方式一无所知

您的视图是使用视图模型的视图,应该动态调整视图。这意味着在您的视图的代码隐藏中,您可以访问您的视图模型,并且可以根据您当前的视图模型自定义视图。您也可以响应视图模型中的更改,因为视图模型将实现 INotifyPropertyChanged(您可以像普通绑定一样在代码隐藏中拦截它)。

您应该问自己的问题是 MVVM 是否适合您。如果 UI 总是来自数据库,那么绑定在哪里定义?也在数据库中?如果是这样,您在视图模型中实现了哪些实际逻辑?换句话说:如果没有自定义逻辑,VM 的意义何在。在这种情况下,我建议使用仅查看方法。如果您需要自定义逻辑,请使用我上面描述的带有代码隐藏的方法。

【讨论】:

  • 您能否阅读我编辑的问题。我在 Main.cs 更改了视图创建,但仍然无法创建文本块。我认为这就是它在 MVVM 模式下的工作方式。
  • 您仍在从视图模型中引用视图。 MVVM 的整个想法是 VM 完全不了解视图。我仍然参考之前给出的答案。如果您确实需要自定义逻辑,请先自行检查。
猜你喜欢
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2011-01-18
  • 2010-12-15
  • 1970-01-01
相关资源
最近更新 更多