2008-11-26 36 views
4

我想在我的主应用程序和用户控件之间共享一个ObjectDataProvider资源。我在包含在应用程序和用户控件中的单独的资源字典文件中定义odp。在WPF中共享ObjectDataProvider

<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实例。一个在主应用程序中,另一个在用户控件中。

如何设置程序以创建单个共享实例?

+1

其实这段代码帮了我一大堆!我想知道如何刷新objectdataprovider。谢谢! – wonea 2010-06-10 15:07:11

回答

0

如果你可以采取不同的路线,这个问题可以很容易地解决。将你的类DataFrameAsymmetric中Singleton class,并在任何地方,你想用它的实例中使用的波纹管

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

在你的代码的任何部分,你将能够通过

DataFrameAsymmetric.Instance 
访问实例
+0

感谢您的答案,但单身人士不会在这里工作。我需要在程序中创建多个类的实例。 – 2008-11-26 18:15:35