Вопрос

Я не могу поверить, что никто не сталкивался с этим или, может быть, я просто что-то упустил.

У меня есть собственный 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);
}

Теперь я хочу создать ObjectDataProvider в XAML, а затем использовать его для привязки данных в элементах управления:

<ObjectDataProvider ObjectType="{x:Type data:DataSourceController}" x:Key="DataSource" MethodName="GetVenues" />

Проблема в том, что DataSourceController не имеет конструктора без параметров и требует передачи объекта OracleSQLConnection (который является общедоступным свойством в коде моего приложения).

Это вообще возможно? Или я должен прибегнуть к использованию свойства 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 " ресурсы еще не существуют.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top