如何在选项卡中处理DataTemplate?

时间:2014-10-17 12:54:44

标签: c# wpf visual-studio-2010 devexpress tabcontrol

我的名字是Andrea这是我的第一篇文章。

你经常帮我作为一个简单的读者,现在我写作是因为我想直接支持。

我必须创建一个标签控件并使用一个按钮"添加标签"我必须添加一个包含相同内容的新标签。 到目前为止一切都很好。

在Tab中我有一个textedit和一个组合框。 我的问题是两个:

1如何为我添加的每个标签加载组合框的内容? 2每次我写文本和编辑标签覆盖时,也要编辑另一个标签的文本。

这里是代码:

Xaml中的数据模板:

  <DataTemplate x:Key="tabItemContent">

            <dxlc:LayoutGroup Orientation="Vertical" Header="Target Description" IsCollapsible="True">
                <!--Name-->
                <dxlc:LayoutItem>
                    <dxlc:LayoutGroup Orientation="Horizontal" ItemSpace="4" >
                        <dxlc:LayoutItem Label="Name" Margin="10">
                            <dxe:TextEdit x:Name="TextEdit_NameTarget"/>
                        </dxlc:LayoutItem>
                    </dxlc:LayoutGroup>
                </dxlc:LayoutItem>
                <!--Nation e Label-->
                <dxlc:LayoutItem>
                    <dxlc:LayoutGroup Orientation="Horizontal" ItemSpace="12" >
                        <dxlc:LayoutItem Label="Nation"  Margin="10">
                            <ComboBox x:Name="ComboBox_TargetNazione" />
                        </dxlc:LayoutItem>                           
                    </dxlc:LayoutGroup>
                </dxlc:LayoutItem>                   
            </dxlc:LayoutGroup>
        </DataTemplate>

C#:

 private void Button_Click_Add(object sender, RoutedEventArgs e)
    {
        DataTemplate tabItemDataTemplate = this.TryFindResource("tabItemContent") as DataTemplate;
        DXTabItem tabItem = new DXTabItem();
        tabItem.Header = "New Tab";
        tabItem.ContentTemplate = tabItemDataTemplate;
        tabControl_Targets.Items.Add(tabItem);

    }

这里是将列表加载到组合框中的位置:

private void LoadComboBoxNation()
    {

        ComboBox_TargetNazione.ItemsSource =
          ManagementTriple.Istance().get_Nation_byTipologyAndContext(ComboBox_TypologyScenario.SelectedItem.ToString(),
          ComboBox_ContextScenario.SelectedItem.ToString());

        controlloselecteditem(ComboBox_SourceNazione.SelectedItem.ToString());

        controlloselecteditem(ComboBox_TargetNazione.SelectedItem.ToString());
    }

谢谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

DataTemplates需要一个简单但基本的要求才能正常工作:您应该使用ViewModel-First方法。

理想情况下,您的制表符控件应该绑定到某些ViewModel。然后,如果您想要显示另一个选项卡,则应该使用按钮单击在ViewModel中调用 Command ,然后ViewModel会将另一个项添加到TabControl ItemsSource属性(这将是一些集合) ,新项目将与其各自的DataTemplate“自动”显示。

WPF的想法是用一个更间接的代码替换视图中的所有这些命令式代码(就像你发布的代码一样),你唯一的担心是操纵ViewModel中的东西,然后是“Dumb View”

希望这会有所帮助,但请不要犹豫,在评论中询问其他详细信息。