编程语言
首页 > 编程语言> > c#-WPF Caliburn.Micro和TabControl-更改选项卡,而不更改模型

c#-WPF Caliburn.Micro和TabControl-更改选项卡,而不更改模型

作者:互联网

我是WPF& MVVM& Caliburn的新手,所以请您放心:)

我在将TabControl与动态创建的模型绑定时遇到问题. Tabcontrol正在正确创建,但更改选项卡不会切换用于绑定“视图”的viewmodel(我正在使用viewmodel第一种方法)

我已基于以下问题提出了解决方案:WPF Caliburn.Micro and TabControl with UserControls issue

这是我的模型定义:

public interface IMainScreenTabItem : IScreen
{
}

public class MainViewTestTabsViewModel : Conductor<IMainScreenTabItem>.Collection.OneActive
{
    public MainViewTestTabsViewModel(IEnumerable<IMainScreenTabItem> tabs)
    {
        Items.Add(new ViewTabModel("Foo1"));
        Items.Add(new ViewTabModel("Foo2"));
        Items.AddRange(tabs);
    }
}

public sealed class ViewTabModel : Screen, IMainScreenTabItem
{
    public ViewTabModel(string displayName)
    {
        DisplayName = displayName;
    }
}

这是MainViewTestTabsView视图:

<UserControl  x:Class="TestWpfApp.Views.MainViewTestTabsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:TestWpfApp.Views"
    xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
    xmlns:viewModels="clr-namespace:TestWpfApp.ViewModels"
    xmlns:cal="http://www.caliburnproject.org"
    mc:Ignorable="d" Width="500" Height="500">
<Grid>
    <TabControl Name="Items">
        <TabControl.ContentTemplate>
            <DataTemplate>
                <StackPanel>
                    <Label  cal:Bind.Model="{Binding}" x:Name="DisplayName" Height="200" Width="200" />
                </StackPanel>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>
</Grid>

我要实现的-是使TabControl具有许多选项卡.每个选项卡都具有相同的“视图”(在DataTemplate中声明),但要绑定此视图,我想使用不同的viewModels(具体来说-相同的模型类[ViewTabModel],但具有不同的数据)

选项卡的大小以及数据应在运行时声明,这些数据应在ViewTabModel模型中.

在下面的示例中-我有两个选项卡,但是更改它们不会更改标签(即使我单击“ Foo2”选项卡,我也一直拥有“ Foo1”标签)

我将caliburn.micro用作框架-使用autofac引导程序(如果重要)
我使用propertyChanged.Fody(https://github.com/Fody/PropertyChanged)忽略了视图模型中所有属性更改的内容.

我究竟做错了什么?

===更新===

附加最小复制解决方案:

https://wetransfer.com/downloads/0b909bfd31a588dda99655f366eddad420170801192103/1d094a

请帮忙!

标签:tabcontrol,wpf,c,mvvm,caliburn-micro
来源: https://codeday.me/bug/20191025/1931495.html