2016-04-18 4 views
0

I m new в WPF и MVVM (PRISM) (честно говоря, я пришел из java), я создал веб-сервис, который взаимодействует с моей БД, и я делаю свои вызовы веб-службы в своей ViewModel Класс. Я пробовал все, что нашел в сети, используя наблюдаемые коллекции, внедряя INotifyPropertyChanged, OnPropertyChanged .. но, похоже, работает, так что теперь (временно) я создал TimerDispacher, который делает все вызовы WS в ViewModel каждую секунду ... но я уверен, что это не самый лучший способ сделать это (если это не самый худший)Обновление элементов пользовательского интерфейса в WPF MVVM

теперь я хочу интерфейс реагировать на все изменения в БД

Вот пример кода логики в моем классе ViewModel и PLZ скажите мне, где я ошибся ... я хочу, чтобы мой код использовал большую часть функций WPF и не использовал такие глупые решения, как таймеры ...

public class MyViewModel : ViewModelBase 
{ 

private ObservableCollection<SomeClass> _listeData; 
public ObservableCollection<SomeClass> ListeData{ 
      set 
      { 
       _listeData= value; 
       OnPropertyChanged("ListeData"); 
      } 
      get { return _listeData; } 
     } 

private string _textData; 
public string TextData 
     { 
      get { return _textData; } 
      set 
      { 
       _textData = value; 
       OnPropertyChanged("TextData"); 

      } 
     } 
//Ctor 
protected internal MyViewModel () 
{ 
InitData(); 
SetTimer(); 
} 

public void InitData() 
{ 
GetTextData(); 
GetListeData(); 
} 

protected void GetTextData(string param) 
{ 
using (var proxy = new WCFServiceClient()) 
      { 
       TextData = proxy.GetTextData(param); 
      } 

} 
protected void GetListeData(string param) 
{ 
using (var proxy = new WCFServiceClient()) 
      { 
       ListeData = new ObservableCollection<SomeClass> (proxy.GetListeData(param)); 
      } 

} 

protected void dispatcherTimer_Tick(object sender, EventArgs e) 
     { 
      InitData(); 
     } 

     private void SetTimer() 
     { 
      var dispatcherTimer = new DispatcherTimer(); 
      dispatcherTimer.Tick += dispatcherTimer_Tick; 
      dispatcherTimer.Interval = new TimeSpan(0, 0, 1); 
      dispatcherTimer.Start(); 
     } 

} 
+0

Что вызывает изменение данных? Изменяется ли база данных автоматически (откуда-то вне вашего приложения) или вы изменяете данные только из своего приложения? – LionAM

+0

Изменения базы данных происходят извне моего приложения. я просто прочитал данные и покажу их. –

ответ

0

Интерфейс WCF, встроенный в ваше приложение, отделяет уровни клиентов и серверов/БД. При регулярном WCF изменения, внесенные в БД, не наблюдаются клиентом (или фактически уровнем сервера). Никакая система уведомлений, основанная на клиенте, не будет исправлена.

Посмотрите here и на this SO post за предложения относительно того, как решить ваши требования.

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