Споделяне на 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
Всъщност този код ми помогна много! Чудех се как да опресня доставчик на обектни данни. Благодаря!   -  person wonea    schedule 10.06.2010


Отговори (1)


Ако можете да поемете по различен път, този проблем може да бъде решен лесно. Преобразувайте вашия клас DataFrameAsymmetric в Singleton клас и на всяко място, където искате да използвате екземпляра му, използвайте както по-долу

<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