2009-10-22 3 views
0

Мне было интересно, был ли способ вызова метода или обновления свойства в моем объекте ViewModel, когда WPF связывается с объектом?WPF Refresh Model on binding

Причина, по которой я хочу сделать это, заключается в том, что при создании объектов viewModel их модель данных содержит только идентификатор, который используется для запроса данных из базы данных, когда это необходимо. Поэтому, когда пользователь переходит к этому объекту, я хочу, чтобы представление уведомило объект ViewModel о том, что его наблюдают, и в результате сообщит модели данных, чтобы обновить ее значения из БД и поместить мой объект ViewModel в состояние загрузки.

Если объекты ViewModel знали, что они обновляли себя, когда они отображались на экране. Я мог избежать необходимости вручную обновлять все объекты.

Спасибо!

ответ

2

Когда WPF связывается с объектом в вашей ViewModel, он будет использовать свойства getter для извлечения значения.

Похоже, вы пытаетесь использовать ленивые вычисления - просто сделать геттер лениво инстанцирует информацию из БД:

private int entityId; // Set in advance 
private Entity entityToFetch; // Will be fetched lazily 

public Entity EntityToFetch 
{ 
    get 
    { 
     if (this.entityToFetch == null) // || this.entityToFetch.Id != this.entityId) - add this if you're letting this change at runtime... 
     { 
      this.entityToFetch = DataAccessLayer.FetchEntityForId(this.entityId); 
     } 

     return this.entityToFetch; 
    } 
} 
+0

Кажется, что это хороший способ - вы можете цепочки getters на ваших объектах (лениво) создавать экземпляры, поскольку каждый экземпляр попадает в первый раз. – andyp

+0

Я расскажу, как это работает. Единственное, что меня пугает, - это когда вы отлаживаете его автоматически загружая объекты, когда вы переходите через код, поэтому ему очень сложно понять, что загрузилось когда. – HaxElit

+0

Хотя я использовал этот метод много раз в прошлом, я должен признать, что мне не нравится модель, зная о базовых классах поставщиков хранилищ. К сожалению, у меня пока нет чистого и приемлемого решения . – Ash

0

Вы можете добавить свойство Selected в свою ViewModel, которое будет установлено при выборе объекта. Когда Selected выбрано значение true, вы можете нажать на свою базу данных.

+0

Я предполагаю, что я должен был быть более ясным. Хотя это работает, если у меня есть один объект, мои объекты ссылаются на другие объекты, которые ссылаются на другие данные и т. Д. Таким образом, я мог выполнять итерацию по всем объектам вручную и называть их обновлением, что кажется болезненным. Любые другие советы? – HaxElit

+0

В этом случае у меня нет действительно ярких идей, извините :( –