我是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
请帮忙!