2016-04-13 10 views
0

私は自分のWPFアプリケーションで小さなナビゲーションシステムを構築しようとしています。私はthisチュートリアルを使ってページ間を移動しています。私はそれの上に1つのUserControlのための '戻る'機能を追加したいと思います。WPFのナビゲーションとcorrentのユーザーコントロールの破棄

私はUserControl Ordersと別のUserControl Orderを持っています。 OrdersがMainWindowに表示され、ボタンをクリックすると、OrderUserControlがMainWindowの同じ場所に表示されます。私はOrders usercontrolへの参照をOrder usercontrolに入れようとして、OrdersからOrderにナビゲートしました。しかし、Orderは、そのクラスの変数を使用しているので、破棄されません。

は、どのように私は私がOrderフォームOrdersに移動したときに、Ordersが破壊されていないと私はOrderからOrdersに移動したときに、Orderが破壊されていることを確認することができます。受注クラスで

ボタンのクリックイベントハンドラ:

private void ShowOrder(object sender, RoutedEventArgs e) 
{ 
    Order order = new Order(); 
    Switcher.Switch(order); 
} 

戻るバックボタンのクリックハンドラ注文のクラス

public UserControl parent; 

private void ReturnBack(object sender, RoutedEventArgs e) 
{ 
    Switcher.Switch(parent); 
} 

答えて

0

私は通常のControlTemplateを使用していますwhice次のパターンを行うには、言うことができますあなたのクラスには:

private Enums.View _currView; 
public Enums.View CurrView 
{ 
    get 
    { 
     return _currView; 
    } 
    set 
    { 
     _currView = value; 
     OnPropertyChanged("CurrView"); 
    } 
} 

はEnums.Viewがあるとき:

public enum View 
{ 
    ViewA = 1, 
    ViewB = 2, 
    ViewC = 3, 
} 

すると、それが変化したとき、我々はビューを変更の上CurrViewへの結合を使用して:

<UserControl ... 
     xmlns:Views="clr-namespace:CustomersManager.View" 
     d:DesignHeight="300" d:DesignWidth="300"> 

    <UserControl.Resources> 
     <!--*********** Control templates ***********--> 
     <ControlTemplate x:Key="DefultTemplate"> 
      <Views:DefultCustomersView/> 
     </ControlTemplate> 
     <ControlTemplate x:Key="A"> 
      <Views:ViewAllCustomersView /> 
     </ControlTemplate> 
     <ControlTemplate x:Key="B"> 
      <Views:AddNewCustomersView /> 
     </ControlTemplate> 
     <ControlTemplate x:Key="C"> 
      <Views:EditCustomersView /> 
     </ControlTemplate> 
    </UserControl.Resources> 

    <Border BorderBrush="Gray" BorderThickness="2"> 
     <Grid> 
      <ContentControl DataContext="{Binding}" > 
       <ContentControl.Style> 
        <Style TargetType="ContentControl"> 
         <Setter Property="Template" Value="{StaticResource DefultTemplate}" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Path=CurrView}" Value="ViewA"> 
           <Setter Property="Template" Value="{StaticResource A}" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Path=CurrView}" Value="ViewB"> 
           <Setter Property="Template" Value="{StaticResource B}" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Path=CurrView}" Value="ViewC"> 
           <Setter Property="Template" Value="{StaticResource C}" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </ContentControl.Style> 
      </ContentControl > 
     </Grid> 
    </Border> 
</UserControl>