我不能相信,没有人碰到这个获得或者也许我只是失去了一些东西。

我有一个自定义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对象(这是在我的应用程序代码隐藏一个公共属性)。

这是在所有可能的?或者,我不得不求助于使用代码DataContext属性为每个控件我想数据绑定?!

有帮助吗?

解决方案

您可以添加DataSourceController作为资源(你必须要做到这一点,从代码隐藏,如果你没有一个参数的构造函数),并使用的 ObjectDataProvider.ObjectInstance 属性来获取ObjectInstance实例,则可以执行上的方法它:

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);
}

ObjectDataProvider可以采取资源:

<ObjectDataProvider ObjectInstance="{StaticResource myDataController}" x:Key="DataSource" MethodName="GetVenues" />

有可能会出现问题,如果你的myDataController在App.xaml中,其中添加了<=>资源之前,它可以被解析,在这种情况下,你会得到一个错误,因为“<=>”资源止跌”吨还不存在。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top