WPF 导航并销毁当前 UserControl

WPF navigation and destroy current UserControl

我正在尝试在我的 WPF 应用程序中构建一个小型导航系统。我正在使用 this 教程在页面之间导航。我想在它上面为一个 UserControl 添加 'Go back' 功能。

我有一个 UserControl Orders 和另一个 UserControl OrderOrders 显示在主窗口中,当我单击一个按钮时,Order UserControl 应该显示在主窗口中的同一位置。我试图在 Order 用户控件中引用 Orders 用户控件,并通过 Order 导航到 Orders。但是 Order 并没有被破坏,因为我正在使用来自 class 的变量。

如何确保当我导航到 Order 表单 Orders 时,Orders 没有被破坏,以及当我从 [= 导航到 Orders 时14=], Order 被摧毁。

订单中的按钮单击事件处理程序Class:

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

Return 后退按钮单击处理程序顺序 Class

public UserControl parent;

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

我通常做下一个使用 ControlTemplate 的模式,假设您在 class:

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,
}

然后,使用上面的Binding to CurrView我们在view改变的时候改变view:

<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>