Совместное использование ObjectDataProvider в WPF

Я пытаюсь разделить ресурс ObjectDataProvider между моим основным приложением и пользовательским элементом управления. Я определяю odp в отдельном файле словаря ресурсов, который включен в приложение и пользовательский элемент управления.

<ObjectDataProvider x:Key="AsymmetricFrameHolder" 
    ObjectType="{x:Type data:DataFrameAsymmetric}"/>  

Затем я пытаюсь получить к нему доступ в основном приложении следующим образом:

ObjectDataProvider odp = (ObjectDataProvider)Resources["AsymmetricFrameHolder"];
return (DataFrameAsymmetric)odp.ObjectInstance;

И привяжите его в пользовательском элементе управления с помощью:

<Grid Name="grid"  Height="Auto" Width="Auto" 
   DataContext="{StaticResource AsymmetricFrameHolder}">

Потом:

<TextBox  Name="TextBox_Length"  Grid.Row="0" Grid.Column="1" 
    Text="{Binding Path=Length }"/>

Это создает 2 экземпляра DataFrameAsymmetric. Один в основном приложении и один в пользовательском элементе управления.

Как я могу настроить программу так, чтобы был создан один общий экземпляр?


person Dave Turvey    schedule 26.11.2008    source источник
comment
На самом деле этот код мне очень помог! Мне было интересно, как обновить objectdataprovider. Спасибо!   -  person wonea    schedule 10.06.2010


Ответы (1)


Если вы выберете другой маршрут, эту проблему легко решить. Преобразуйте свой класс DataFrameAsymmetric в одноэлементный класс и в любом месте, где вы хотите использовать его, используйте как показано ниже

<Grid Name="grid"  Height="Auto" Width="Auto" DataContext="{Binding Source={x:Static data:DataFrameAsymmetric.Instance}}">

В любой части вашего кода вы сможете получить доступ к экземпляру с помощью

DataFrameAsymmetric.Instance
person Jobi Joy    schedule 26.11.2008
comment
Спасибо за ответ, но синглтон здесь не работает. Мне нужно будет сделать в программе более одного экземпляра класса. - person Dave Turvey; 26.11.2008