WPF Caliburn.Micro DisplayName не привязывается к заголовку элемента вкладки Tab Control - PullRequest
0 голосов
/ 10 октября 2019

У меня есть элемент управления табуляции:

<TabControl Grid.Row="1" x:Name="Items"/>

DataContext - это Caliburn.Micro.Conductor<CompanyScreen>.Collection.OneActive, в котором есть несколько элементов, добавленных в коллекцию Items в конструкторе.

TabItems генерируют, как и ожидалось, однако содержимое их заголовка является результатом ToString(), а не DisplayName, который был задан до добавления их в коллекцию Items.

Пример:

<UserControl x:Class="Company.ParentView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"              
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">

     <ContentControl x:Name="MyViewModel"/>
</UserControl>

<UserControl x:Class="Company.MyView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"              
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">

     <TabControl x:Name="Items"/>
</UserControl>
public class ParentViewModel : Screen
{
    public class ParentViewModel()
    {
        MyViewModel = new MyViewModel(new FooViewModel(), new BarViewModel());
    }

    MyViewModel _myViewModel;
    public MyViewModel MyViewModel
    {
        get => _myViewModel;
        set
        {
            _myViewModel = value;
            NotifyOfPropertyChange(nameof(MyViewModel));
        }
    }
}

public class MyViewModel : Caliburn.Micro.Conductor<Screen>.Collection.OneActive
{
    public MyViewModel(FooViewModel foo, BarViewModel bar)
    {
        foo.DisplayName = "Foo Tab";
        bar.DisplayName = "Bar Tab";

        Items.Add(foo);
        Items.Add(bar);
    }
}
public class FooViewModel : Screen { }

public class BarViewModel : Screen { }
...