以编程方式创建文本块

时间:2014-04-19 18:40:08

标签: c# wpf xaml mvvm

我想以编程方式创建文本块 但似乎文件背后的代码不构建它。

修改

内部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)没有创建文本块。 我想,由于DataContext设置为MainViewModel.cs

,Main.xml无法读取它

请帮忙。

1 个答案:

答案 0 :(得分:3)

您希望遵循MVVM模式的事实并不排除动态视图创建。但是我总是建议您使用&#34;仅逻辑&#34;在视图模型中。这意味着VM仍然只包含视图与之交互的逻辑,但绝对不了解视图及其行为

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

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