Свойство типа ObservableCollection вызывает ошибку в конструкторе - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть пара проектов WPF, над которыми я работаю в сообществе Visual Studio 2019. Одна - это библиотека управления, а другая - приложение, использующее библиотеку управления.

В управляющей библиотеке у меня есть класс ExteraWindow, полученный из класса System.Windows.Window. Соответствующий код для этого класса выглядит примерно так:

namespace Extera.Presentation.Control
{
    public class Window : System.Windows.Window
    {
        static Window()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(Window),
                new System.Windows.FrameworkPropertyMetadata(typeof(Window)));
        }

        public Window()
            : base()
        {
            // initialize the MenuItems collection
            MenuItems.CollectionChanged += Items_CollectionChanged;
        }

        public ObservableCollection<MenuItem> MenuItems { get; } = new ObservableCollection<MenuItem>();

        private void Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            // some code here
        }

        // some more class members here
    }
}

Код для класса MenuItem выглядит следующим образом:

    public class MenuItem 
    {
        public MenuItem()
        {
            Caption = "";
            Title = "";
        }

        public string Title { get; set; }
        public string Caption { get; set; }
    }

Класс ExteraWindow используется в Приложение выглядит так:

<control:Window x:Class="App.MainWindow"
        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:Extera.App.ProjectManager"
        xmlns:control="clr-namespace:Extera.Presentation.Control;assembly=Extera.Presentation.Control"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <control:ExteraWindow.MenuItems>
        <control:MenuItem Title="aaaa" Caption="bbbb" />
    </control:ExteraWindow.MenuItems>
    <Border BorderBrush="White" BorderThickness="2">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Label Foreground="White">a;osidjflsodjfo;sdjg</Label>
        </Grid>
    </Border>
</control:ExteraWindow>

Код компилируется и работает нормально. Если я устанавливаю точку останова в методе Items_CollectionChanged класса ExteraWindow, то точка останова срабатывает один раз, и это для добавления элемента MenuItem с Title "aaaa" и Caption "bbbb" , что именно то, что я ожидал.

Но проблема в конструкторе MainWindow. Вот скриншот: ![screenshot of Visual Studio

Итак, мой вопрос: как я могу устранить эту ошибку? Компилятор, конечно, ни на что не жалуется, так что это проблема только дизайнера. Есть ли какие-либо атрибуты, которыми мне нужно украсить мое свойство MenuItems? Или что-то еще, что я пропустил?

Спасибо, Тиби.

Редактировать:

Заметил, что класс MenuItem был опубликован только с конструктором, пропуская свойства для Title и Caption. Я добавил их сейчас, для полноты.

1 Ответ

0 голосов
/ 13 апреля 2020

Свойство MenuItems не содержит «set», но вы пытаетесь «установить» его из xaml, так что, возможно, в этом причина.

...