2012-05-09 27 views
0

我有一個WPF項目,它只是幾十個小工具的集合。我把每個工具放在主選項卡控件的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 
     */ 

    } 
} 

將它們分成部分類的目的是我們可以將它們放在不同的文件中。

+0

我肯定不遵循你可以發佈一些代碼? – Paparazzi

+0

有沒有辦法讓一個班級認爲一個tabitem就是這個世界,並讓它表現得像那個單個tabitem對應的MainWindow? – Bob

+0

我會考慮讓每個工具都是自己的用戶控件。 – mdm20

回答

0

爲什麼不拉

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

和其他所有InitializeX到第一局部類。這些被分離成方法,但可以與他們溝通?

+0

由於我的代碼是實時更新,因此不僅有一種方法與Tool2/Tool1相關。主文件將會非常龐大​​,並且會把所有的方法放在一起。我將它們分成了每個部分類,以便我可以在不同的文件中使用不同的方法。對不起,這個例子中沒有清楚地顯示出來。我會更新這個例子來說明這個想法。謝謝。 – Bob

+0

好,但正如你所說,你說過一個溝通問題。我使用Regions來組織代碼。 – Paparazzi

+0

區域或部分類的主要問題是字段/方法是彼此可見的。在新選項卡上工作時,我需要檢查我定義的字段/方法是否已在其他選項卡中定義。當有很多工具時,這可能會非常複雜。 – Bob

相關問題