【问题标题】:WPF tab-control with the same controls for all tabsWPF 选项卡控件,所有选项卡都具有相同的控件
【发布时间】:2010-09-07 22:17:31
【问题描述】:

如何使用 wpf 中的数据控件创建 n 个选项卡?

假设主应用程序有一个名为“新客户”和“保存数据”的按钮。当按下“新客户”时,会出现一个新标签,标签中包含两个文本框“名称”和“客户编号”,依此类推。填充这两个字段后,按“保存数据”应将焦点选项卡中的信息存储到数据库中。

我遇到的问题是“名称”和“客户编号”文本框的静态名称为 x:Name="CustomerName" 和 x:Name="CustomerNumber"。我发现你不能复制这些。

有人可以建议我如何解决这个问题吗?先感谢您!

【问题讨论】:

    标签: wpf textbox tabcontrol user-input


    【解决方案1】:

    使用 MVVM:

    为新客户创建一个视图和一个 ViewModel,视图上有一个保存按钮,该按钮执行代码以将客户保存到数据库。此代码应位于客户模型或客户服务中。

    NewCustomerView 不需要与其控件关联的名称,因为您会将它们的 Text 属性绑定到 ViewModel 或底层模型上的属性,除非您必须出于其他目的而不是从每个控件中获取数据来引用它们一个。

    在您的主窗体上,您将拥有 Tab 控件,其项目源设置为 MainWindowViewModel 上的 ObservableCollection。按下 New Customer 按钮将在此 ObservableCollection 中填充一个新条目。

    在 MainWindowView 中,您可以放置​​一个将 NewCustomerViewModel 映射到 NewCustomerView 的数据模板,例如:

      <DataTemplate DataType="{x:Type vm:NewCustomerViewModel}">
        <AdornerDecorator>
           <views:NewCustomerView DataContext="{Binding}"/>
        </AdornerDecorator>
      </DataTemplate>
    

    这基本上是说当内容是NewCustomerViewModel时,渲染一个NewCustomerView。

    您应该阅读 MVVM,因为这将解决您的命名问题,以及更好的架构应用程序。

    在 MVVM 上查看 Josh Smiths article,还有很多其他信息可供阅读。

    【讨论】:

    • 如果我不承担MVVM设计路线,还有其他方法可以执行吗?
    • 您仍然可以将 TabControl ItemsSource 绑定到 UserControls 的 ObservableCollection,在用户单击 New Customer 时在您的代码中,创建 NewCustomerUserControl 的新实例并将其添加到集合中
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2011-10-31
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多