Передача существующих экземпляров объекта в качестве параметров конструктора ObjectDataProvider в WPF - PullRequest
1 голос
/ 20 января 2011

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

System.Windows.Data Ошибка: 34: ObjectDataProvider не может создать объект; Тип = 'VegaViewModel'; Ошибка = 'Неправильные параметры для конструктор.' MissingMethodException: 'System.MissingMethodException: Конструктор по типу «WpfApplication1.VegaViewModel» не найденный. в System.RuntimeType.CreateInstanceImpl (BindingFlags bindingAttr, Binder Binder, Object [] args, CultureInfo culture, Объект [] ActivationAttributes) в System.Activator.CreateInstance (Тип тип, BindingFlags bindingAttr, Binder связыватель, Object [] args, CultureInfo культура, объект [] ActivationAttributes) в System.Windows.Data.ObjectDataProvider.CreateObjectInstance (Исключение & е) '

Вот мой Xaml:

<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaModel}" MethodName="Sample" x:Key="VegaPnlData"/>     
<ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaViewModel}" x:Key="VegaViewModel">
                <ObjectDataProvider.ConstructorParameters>
                    <ObjectDataProvider ObjectInstance="{StaticResource VegaPnlData}"/>
               </ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>

Если я использую этот xaml, я получаю ту же ошибку:

 <ObjectDataProvider ObjectType="{x:Type WpfApplication1:VegaViewModel}" x:Key="VegaViewModel">
            <ObjectDataProvider.ConstructorParameters>
                <StaticResource ResourceKey="VegaPnlData"/>
            </ObjectDataProvider.ConstructorParameters>
        </ObjectDataProvider>

Вот код для класса VegaViewModel:

public class VegaViewModel
{            
    public VegaViewModel(VegaModel vegaPnl)
    {
        VegaPnl = vegaPnl;           
    }

    public VegaModel VegaPnl { get; set; }            
}

1 Ответ

0 голосов
/ 20 января 2011

Вы не можете передать ObjectDataProvider через ConstructorParameters. Причина как Доктор. WPF адекватно заявляет ...

ObjectDataProvider (ODP) является предназначен для использования с привязкой. Если вы используете его вне контекста привязки, вы в конечном итоге ссылаясь на экземпляр ODP, а не разыменованный объект, что это "Обеспечивает".

Ваша попытка сделать что-то, что фреймворк не допустит по замыслу.

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