Общий Аргумент Ограничение Нарушения? - PullRequest
2 голосов
/ 04 ноября 2019

Я объявил базовый класс диалогового окна, который вводит текст данных, чтобы убедиться, что у прикрепленной модели представления есть соответствующий тип возвращаемого значения. Когда я пытаюсь его использовать, я получаю общую ошибку аргументов:

GenericArguments [1], 'Mocks.MidSoft_Hospitality_ViewModels_Dialogs_ReceiveItemViewModel_32_569724246', на 'Mocks.MidSoft_oftDight_tube_56_target_setup_setup_setup_setup_setup_setup_setup_1_2_64_1_5_1_64_2_1_5_2_64_1_5_1_0_1_0_1_2_2_1типа 'TViewModel'.

Я не понимаю, почему это происходит

Объявление базового диалогового окна:

public class BaseDialogWindow<TResult, TViewModel> : DialogWindowBase<TResult> where TViewModel: ViewModels.Dialogs.DialogBaseViewModel<TResult>
{
    public BaseDialogWindow() : base()
    {

    }

    new public TViewModel DataContext
    {
        get => this.GetValue(DataContextProperty) as TViewModel;
        set => this.SetValue(DataContextProperty, value);
    }

}

DialogWindowBase:

public class DialogWindowBase<TResult> : Window, IDialog<TResult>
{
    public DialogWindowBase()
    {
        //Formatting code here
    }

    public Result Result { get; set; } = Result.None;

    public TResult ReturnData { get; set; }

}

Модель представления:

public class ReceiveItemViewModel : ViewModels.Dialogs.DialogBaseViewModel<ReceiveItemResult>
{
    //View Model Code here
}

и xaml:

<local:BaseDialogWindow x:Class="MidSoft.Hospitality.Views.Dialogs.ReceiveItemDialog"
                        x:TypeArguments="local:ReceiveItemResult, vm:ReceiveItemViewModel"
                        xmlns:vm="clr-namespace:MidSoft.Hospitality.ViewModels.Dialogs"
                        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:MidSoft.Hospitality.Views.Dialogs"
                        mc:Ignorable="d"
                        d:DataContext="{d:DesignInstance vm:ReceiveItemViewModel, IsDesignTimeCreatable=False}"
                        x:Name="ReceiveStockItemDialog"
                        Height="450" Width="800">
    <Grid>
    </Grid>
</local:BaseDialogWindow>

Код для диалогового окна:

    public partial class ReceiveItemDialog
    {
        public ReceiveItemDialog()
        {
            InitializeComponent();
        }
    }

Ошибка, которую яссылка выше - единственная ошибка компилятора, которую я получаю. Буду признателен за понимание этой ошибки.

Обновление: я заметил, что приложение компилируется и работает без каких-либо исключений, но ошибка все еще существует, и дизайнер xaml показывает ее как недопустимую разметку

1 Ответ

0 голосов
/ 04 ноября 2019

IsDesignTimeCreatable=False заставит конструктора игнорировать указанный тип DesignInstance и создать замещающий тип, используя отражение. В этом случае разработчик не смог распознать универсальный тип, так как он является сложным типом, а не примитивным типом, и поэтому не смог создать правильный экземпляр макета с подходящим универсальным параметром TViewModel.

. Чтобы решить эту проблему,Вы можете установить для свойства IsDesignTimeCreatable значение True и реализовать конструктор по умолчанию для ReceiveItemViewModel. Если конструктор по умолчанию невозможен, введите тип оболочки только для времени разработки DesignInstance и потратьте его на конструктор по умолчанию, который правильно инициализирует базовый тип ReceiveItemViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...