【问题标题】:What is a better approach to communicate with tab items than partial class与部分类相比,与选项卡项进行通信的更好方法是什么
【发布时间】:2012-05-09 19:50:18
【问题描述】:

我有一个 WPF 项目,它只是几十个小工具的集合。我将每个工具放在主 tabcontrol 的一个 tabitem 上,并为每个 tabitem 编写了一个部分 MainWinow 类。但是,由于工具之间的关系很小,我更愿意密封每个工具,以免它们相互干扰。此外,我听说偏班是邪恶的。这里的问题是 MainWindow 以外的一个类很难与 UI 项进行通信(据我所知)。关于我应该去哪里的任何建议?

非常感谢。

应 Blam 的要求,这是我当前代码的简化版本。原代码太大,这里贴不出来。

xaml:

<Window x:Class="WpfApplication7.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TabControl Margin="0,0,0,0" Name="tabControl1">
        <TabItem Header="Tool1" Name="Tool1">
            <Grid>
                <Label Name="lblTool1"/>
            </Grid>
        </TabItem>
        <TabItem Header="Tool2" Name="Tool2">
            <Grid>
                <Label Name="lblTool2"/>
            </Grid>
        </TabItem>
    </TabControl>
</Grid>
</Window>

部分类 1 (MainWindow.xaml.cs):

namespace WpfApplication7
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        string caption = "Tool Collection";
        public MainWindow()
        {
            InitializeComponent();
            this.Title = caption;

            InitialTool1();
            InitialTool2();

        }
        /*
            Some other methods for main window, including those for menu bar, tool bar, ... 
        */
    }
}

部分类 2 (Tool1.cs):

namespace WpfApplication7
{
    string tool1Details = "This is tool 1";
    /* 
        Other parameters related to tool1 
    */
    public partial class MainWindow : Window
    {

        public void InitialTool1()
        {
            lblTool1.Content = tool1Details;

        }
        /*
            Some other methods that communicate with tabitem1
        */
    }
}

部分类 3 (Tool2.cs):

namespace WpfApplication7
{
    public partial class MainWindow : Window
    {
        string tool2Detail = "This is tool 2";
        /* 
             Other parameters related to tool2 
        */
        public void InitialTool2()
        {
            lblTool2.Content = tool2Detail;

        }
        /*
            Some other methods that communicate with tabitem2
         */

    }
}

将它们拆分为部分类的目的是我们可以将它们放在不同的文件中。

【问题讨论】:

  • 我肯定不关注你能贴一些代码吗?
  • 有没有办法让一个班级相信一个单独的tabitem就是世界,并让它的行为像与那个单独的tabitem对应的MainWindow?
  • 我会考虑让每个工具都成为自己的用户控件。
  • 你能提供更多细节吗?你的意思是我应该为每个工具创建一个控件,然后将它们添加到大 tabcontrol 上?
  • 谢谢,mdm20。我会采用你的方式。但是,由于您使用的是 cmets,因此我无法将您的设置为答案。我很抱歉。

标签: wpf oop partial-classes


【解决方案1】:

为什么不直接拉

    public void InitialTool2()
    {
        lblTool2.Content = "This is tool 2";
        /*
           Lot of codes that communicate with tabitem2
         */
    }

和所有其他 InitializeX 一起进入第一个 Partial 类。它们被分成方法,但可以与它们通信?

【讨论】:

  • Tool2/Tool1 相关的方法不止一种,因为我的代码是实时更新的。将所有方法放在一起时,主文件将非常庞大且令人困惑。我将它们分成每个部分类,以便我可以将不同的方法放在不同的文件上。很抱歉,示例中没有清楚地显示它。我将更新示例来说明这个想法。谢谢。
  • 好的,但正如你所说,你说的是沟通问题。我使用 Regions 来组织代码。
  • 区域或部分类的主要问题是字段/方法彼此可见。在新选项卡上工作时,我需要检查我正在定义的字段/方法是否已在其他选项卡中定义。当有很多工具时,这可能会非常复杂。
  • 这里是一个例子,如果我在tool1中定义了一个字段:“name”,那么在“tool2”中,我不能在同一个级别定义一个具有相同“name”的字段。更糟糕的是,如果忘记定义新变量,直接在tool2中使用,它就会有值。如果我对其进行更改,我将更改 tool1 中的变量。我需要说明一下,第一个“名称”属于 tool1,而第二个“名称”属于 tool2。
  • 那我们不按照 mdm20 20 小时前的建议,让每个工具都成为自己的用户控件吗?表现出一些努力。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 2023-04-08
  • 2011-09-07
  • 2011-11-03
  • 1970-01-01
  • 2015-03-13
  • 2011-11-12
相关资源
最近更新 更多