wpf - 使用 ObjectDataProvider

标签 wpf xaml objectdataprovider app.xaml

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

我有一个自定义的 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/

相关文章:

wpf - 是否可以将 WPF Combobox.SelectedValue 绑定(bind)到多个 ObjectDataProvider?

c# - WPF:使用 ObjectDataProvider 将整数转换为 bool 值

c# - 带有对象实例的 XAML 中的 ObjectDataProvider 不会在调试中调用 ViewModel 构造函数

wpf - scrollviewer 属性 'content' 设置不止一次

WPF DataGrid 禁用一行但允许一个单元格

.net - 在哪里可以找到一些 WPF 动画示例?

wpf - 将字符串定义为静态资源

wpf - 属性触发器绑定(bind)到标志枚举

c# - 从一个 DataTemplate 切换到另一个

windows - 如何防止“打开方式”对话框一直出现在 Windows 应用商店应用程序中?