在WPF中共享ObjectDataProvider

时间:2008-11-26 15:14:13

标签: c# wpf objectdataprovider

我正在尝试在主应用程序和用户控件之间共享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实例。一个在主应用程序中,一个在用户控件中。

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

1 个答案:

答案 0 :(得分:0)

如果您可以采取不同的路线,这个问题可以轻松解决。将您的Class DataFrameAsymmetric转换为 Singleton class ,并在您要使用它的实例的任何地方使用如下所示

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

在代码的任何部分,您都可以通过

访问该实例
DataFrameAsymmetric.Instance