簡體   English   中英

WPF Caliburn.Micro和DXTabControl與UserControl無法正常工作

[英]WPF Caliburn.Micro and DXTabControl with UserControl not working

我正在嘗試使用TabControl在UserControls之間切換。

我可以使用XAML將選項卡的內容設置為usercontrols,但之后它只會綁定到視圖而不是視圖模型。

我的VM是Caliburn.Micro Conductor,只要用戶切換標簽,它就會調用ActivateItem。 當我只有一個usercontrol時它工作正常,但是當我創建另一個時,第一個不會加載視圖。

這是我正在使用的一些代碼:

ShellView:

<dx:ThemedWindow x:Class="PSCServiceManager.Views.ShellView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:cal="http://www.caliburnproject.org"
             xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             Title="Service Manager" WindowState="Maximized"
             Height="525" Width="720">

<Grid>
    <dx:DXTabControl>
        <dx:DXTabItem Header="Master Teknisi">
            <ContentControl x:Name="LoadMasterTechnicianView" cal:View.Model="{Binding ActiveItem}" />
        </dx:DXTabItem>

        <dx:DXTabItem Header="Servisan">
            <ContentControl x:Name="LoadServicesView" cal:View.Model="{Binding ActiveItem}" />
        </dx:DXTabItem>
    </dx:DXTabControl>
</Grid>

ShellViewModel:

using Caliburn.Micro;

namespace PSCServiceManager.ViewModels
{
    public class ShellViewModel : Conductor<IScreen>
    {
        private MasterTechnicianViewModel masterTechnicianViewModel;
        private ServicesViewModel servicesViewModel;

        public ShellViewModel()
        {
            LoadMasterTechnicianView();
        }

        public void LoadMasterTechnicianView()
        {
            ActivateItem(masterTechnicianViewModel);
        }

        public void LoadServicesView()
        {
            ActivateItem(servicesViewModel);
        }
    }
}

實現此目的的更簡單/替代方法是創建要綁定到Tab控件的用戶控件集合。 例如,

public interface ITabUserControl
{
    string DisplayName { get; set; }
}

public class MasterTechnicianViewModel : ITabUserControl
{
    public string DisplayName { get; set; } = "Master Technician";
}

public class ServicesViewModel : ITabUserControl
{
    public string DisplayName { get; set; } = "Services";
}

現在,在ShellViewModel中,您可以創建一個ITabUserControl集合

public List<ITabUserControl> UserControls { get; set; }
    public ShellViewModel()
    {
        UserControls = new List<ITabUserControl>();
        UserControls.Add(new MasterTechnicianViewModel());
        UserControls.Add(new ServicesViewModel());
    }

並將你的TabControl綁定為

 <dx:DXTabControl x:Name="UserControls"/>

現在,您可以在沒有任何問題的情況下切換控件,而無需顯式激活它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM