gpt4 book ai didi

wpf - 使用 ObjectDataProvider

转载 作者:行者123 更新时间:2023-12-01 12:01:46 26 4
gpt4 key购买 nike

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

我有一个自定义的 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,然后用它来绑定(bind)控件中的数据:
<ObjectDataProvider ObjectType="{x:Type data:DataSourceController}" x:Key="DataSource" MethodName="GetVenues" />

问题是 DataSourceController 没有无参数构造函数,需要传入一个 OracleSQLConnection 对象(这是我的 App 代码隐藏中的公共(public)属性)。

这是可能吗?或者我必须为每个要绑定(bind)数据的控件使用代码内 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”资源还不存在。

关于wpf - 使用 ObjectDataProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com