rasheedtcr Ответов: 1

Проблема WPF porpertygrid с коллекцией внутри коллекции


У меня есть приложение WPF с сеткой свойств. Я привязываю сетку свойств к объекту класса (скажем, имя класса «mainclass»). «Основной класс» имеет свойство «APIConditions», которое является наблюдаемой коллекцией другого настраиваемого класса «SearchAPIModel». SearchAPIModel имеет свойство observablecollection класса KeyValues. Я добавил элемент в коллекцию «APIConditions», используя пользовательский интерфейс сетки свойств. Вновь добавленный объект в коллекцию успешно сохраняется. Но проблема, с которой я столкнулся, заключается в том, что я могу привязать объект «основной класс» к сетке свойств, но когда я пытаюсь открыть свойство «APIConditions», которое должно открываться во всплывающем окне, приложение вылетает с ошибкой
- Необработанное исключение типа "система".Отражение.TargetParameterCountException ' произошло в PresentationFramework.dll
Дополнительная информация: несоответствие количества параметров."

Может ли кто-нибудь объяснить, почему возникает эта проблема и каково ее решение ?.

Заранее спасибо,
Рашид

Что я уже пробовал:

Пожалуйста, смотрите классы, как показано ниже.
[Serializable]
public class MainClass : INotifyPropertyChanged, INotifyCollectionChanged
{
    private string _SelectText, _ID;      
    private ObservableCollection<searchapimodel> _APIConditions;       
    public event PropertyChangedEventHandler PropertyChanged;
    public event NotifyCollectionChangedEventHandler CollectionChanged;
   
    private void OnNotifyPropertyChanged(string propertyName)
    {
        var tmp = PropertyChanged;
        if (tmp != null)
        {
            tmp(this, new PropertyChangedEventArgs(propertyName));
        }
    }      
  
    [CategoryAttribute("TextBox Details"), DefaultValueAttribute(true), DescriptionAttribute("ID of the TextBox control"), ReadOnly(true)]
    public string ID
    {
        get { return _ID; }
        set
        {

            if (_ID != value)
            {
                _ID = value;
            }
        }
    }

    [CategoryAttribute("LookupOption Details"), DefaultValueAttribute(true), DescriptionAttribute("Initial Text For Lookup And Nothing is Selected"), ReadOnly(false)]
    public string SelectText
    {
        get { return _SelectText; }
        set
        {
            if (_SelectText != value)
            {
                _SelectText = value;                   
            }
        }
    }

    [CategoryAttribute("LookupOption Details"), DefaultValueAttribute(true), DescriptionAttribute("Collection Of SearchAPIModel.")]
    public ObservableCollection<searchapimodel> APIConditions
    {
        get { return _APIConditions; }
        set
        {
            if (_APIConditions != value)
            {
                _APIConditions = value;
            }
        }
    }
    public MainClass()
    {
        this.SelectText = "[SELECT]";
        this.ID = "";
        this.APIConditions = new ObservableCollection<searchapimodel>();
    }
}

Класс SearchAPIModel
[Serializable]
public class SearchAPIModel : INotifyPropertyChanged, INotifyCollectionChanged
{

    private string _ConditionRow;
    public event PropertyChangedEventHandler PropertyChanged;
    public event NotifyCollectionChangedEventHandler CollectionChanged;
    
    private ObservableCollection<keyvalues> _SearchTextList;        
    
    private void OnNotifyPropertyChanged(string propertyName)
    {
        var tmp = PropertyChanged;
        if (tmp != null)
        {
            tmp(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    [CategoryAttribute("API Condition Details"), DefaultValueAttribute(true), DescriptionAttribute("ConditionRow")]
    public string ConditionRow
    {
        get { return _ConditionRow; }
        set
        {
            if (_ConditionRow != value)
            {
                _ConditionRow = value;
                OnNotifyPropertyChanged("");
            }
        }
    }

    [CategoryAttribute("API Condition Details"), DefaultValueAttribute(true), DescriptionAttribute("SearchTextList")]
    public ObservableCollection<keyvalues> SearchTextList
    {
        get { return _SearchTextList; }
        set
        {
            _SearchTextList = value;
            if (_SearchTextList != value)
            {
                _SearchTextList = value;
            }
        }
    }

    public SearchAPIModel()
    {
        this.ConditionRow = "";
        this.SearchTextList = new ObservableCollection<keyvalues>();            
    }
  
}

Класс KeyValues
[Serializable]
public class KeyValues : INotifyPropertyChanged
{
    private string _key, _Value;
    [ReadOnly(false)]
    public string Key
    {
      get { return _key; }
      set { _key = value;  }
    }
    [ReadOnly(false)]
    public string Value
    {
        get { return _Value; }
        set { _Value = value; }
    }

    public KeyValues()
    {
        Key = "";
        Value = "";
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnNotifyPropertyChanged()
    {
        var tmp = PropertyChanged;
        if (tmp != null)
        {
            tmp(this, new PropertyChangedEventArgs(""));
        }
    }
}

1 Ответов

Рейтинг:
1

Graeme_Grant

Согласно с Класс TargetParameterCountException (System.Отражение)[^]:

Цитата:
Исключение, которое возникает, когда количество параметров для вызова не соответствует ожидаемому числу.

Глядя на сообщение об ошибке по номинальной стоимости, то, что вы передаете, не то, что ожидается.

Вам нужно определить линию, на которой возникает эта ошибка, прежде чем вы сможете начать искать решения. Мы не знаем, на какой линии это происходит или что ожидается, если не будет предоставлена дополнительная информация.

Как только вы будете готовы обновить вопрос с четкими и краткими деталями, образцом кода, любыми сообщениями об ошибках (включая внутренние детали исключения) и т. д., Пожалуйста, нажмите на кнопку Улучшить вопрос чтобы добавить больше информации к этому вопросу.