我不敢相信没有人能解决这个问题,或者我只是想念一些东西。

我有一个自定义的DataSourceController,用于处理数据检索并将其提供给其余的应用程序控件。自然地,它使用我也初始化的sql连接。

我的应用程式码:

private ISQLConnection conn;
public ISQLConnection SqlConnection { get { return conn; } }

private DataSourceController dataSource;
public DataSourceController DataSource { get { return dataSource; } }

protected override void OnStartup(StartupEventArgs e) {
    //-------------------------------------------------------
    // Initialize connections
    conn = new OracleSQLConnection("connectionStringHere");

    //-------------------------------------------------------
    // Initialize controllers
    //dataSource = new DataSourceController(conn);

    base.OnStartup(e);
}

现在,我想在XAML中创建ObjectDataProvider,然后将其用于绑定控件中的数据:
<ObjectDataProvider ObjectType="{x:Type data:DataSourceController}" x:Key="DataSource" MethodName="GetVenues" />

问题在于,DataSourceController没有无参数构造函数,并且需要传递OracleSQLConnection对象(这是我背后的App代码中的公共属性)。

这是可能吗?还是我不得不对要进行数据绑定的每个控件使用代码中的DataContext属性?

最佳答案

您可以将DataSourceController添加为资源(如果您没有无参数的构造函数,则必须从代码隐藏中进行此操作),并使用ObjectDataProvider.ObjectInstance属性获取DataSourceController实例,然后可以在其上执行方法:

private ISQLConnection conn;
public ISQLConnection SqlConnection { get { return conn; } }

private DataSourceController dataSource;
public DataSourceController DataSource { get { return dataSource; } }

protected override void OnStartup(StartupEventArgs e) {
   //-------------------------------------------------------
   // Initialize connections
   conn = new OracleSQLConnection("connectionStringHere");

   //-------------------------------------------------------
   // Initialize controllers
   dataSource = new DataSourceController(conn);
   this.Resources.Add("myDataController", dataSource);
   base.OnStartup(e);
}
ObjectInstance可以占用资源:
<ObjectDataProvider ObjectInstance="{StaticResource myDataController}" x:Key="DataSource" MethodName="GetVenues" />

如果您的ObjectDataProvider位于App.xaml中,则可能会出现问题,可以在添加DataSourceController资源之前对其进行解析,在这种情况下,您将收到错误消息,因为尚不存在“myDataController”资源。

09-06 05:34