2009-03-12 3 views
3

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

У меня есть пользовательский DataSourceController, который обрабатывает получение данных и предоставляет их остальным элементам управления приложениями. Естественно, он использует соединение sql, которое я также инициализирую.

My App код:

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 свойства для каждого элемента управления, который я хочу привязать к данным ?!

ответ

5

Вы можете добавить 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» еще не существует.

+0

Спасибо, Роберт! Я пробовал это, и это сработало! Хотя у меня тогда были некоторые (несвязанные) проблемы дальше по дороге и пришлось отказаться от встроенного кода, а затем установить объект как DataContext моего окна. – Alexandra

Смежные вопросы