在WPF中共享ObjectDataProvider

4
我正在尝试在我的主应用程序和用户控件之间共享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 }"/>

这将创建两个DataFrameAsymmetric实例。一个在主应用程序中,另一个在用户控件中。

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


1
实际上,这段代码帮了我很多忙!我一直在想如何刷新ObjectDataProvider。谢谢! - wonea
1个回答

0
如果您能采用不同的方法,这个问题就可以轻松解决。将您的类DataFrameAsymmetric转换为Singleton class,并在任何需要使用它的实例的地方使用如下代码。
<Grid Name="grid"  Height="Auto" Width="Auto" DataContext="{Binding Source={x:Static data:DataFrameAsymmetric.Instance}}">

在您的代码的任何部分,您都可以通过以下方式访问实例:

DataFrameAsymmetric.Instance

谢谢你的回答,但是单例在这里行不通。我需要在程序中创建多个类的实例。 - David Turvey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接