2013-04-16 2 views
2

Я конвертирую простое приложение WinForm в WPF с использованием шаблона MVVM. Моя пристрастная реализация кода модели представлений приведена ниже. Я застрял в showPath(string path) и addFile(string file), потому что они используют управление WPF. Как я могу преодолеть эту проблему?Преобразование приложения WinForm в WPF ViewModel

class DirectorySearchModel 
{ 
    /*-- invoke on UI thread --------------------------------*/ 

    void showPath(string path) 
    { 
     //textBlock1.Text = path; 
     //return path; 
    } 
    /*-- invoke on UI thread --------------------------------*/ 

    void addFile(string file) 
    { 
     //listBox1.Items.Add(file); 
    } 
    /*-- recursive search for files matching pattern --------*/ 

    void Search(string path, string pattern) 
    { 
     /* called on asynch delegate's thread */ 
     if (System.Windows.Application.Current.Dispatcher.CheckAccess()) 
      showPath(path); 
     else 
      System.Windows.Application.Current.Dispatcher.Invoke(
       new Action<string>(showPath), DispatcherPriority.Background, new string[] { path } 
      ); 
     string[] files = Directory.GetFiles(path, pattern); 
     foreach (string file in files) 
     { 
      if (System.Windows.Application.Current.Dispatcher.CheckAccess()) 
       addFile(file); 
      else 
       System.Windows.Application.Current.Dispatcher.Invoke(new Action<string>(addFile), DispatcherPriority.Background, 
        new string[] { file } 
       ); 
     } 
     string[] dirs = System.IO.Directory.GetDirectories(path); 
     foreach (string dir in dirs) 
      Search(dir, pattern); 
    } 



} 

ответ

3

Как я могу решить эту проблему

Вы бы два свойства - в ObservableCollection<string> для имен файлов (что было listBox1) и string (что также повышает PropertyChanged на съемочной площадке) для путь (что было textBlock1). Затем представление связывается с этими свойствами.

Эти методы просто необходимо установить путь и добавить в коллекцию, и представление будет обновляться автоматически.

+0

Я внес изменения в соответствии с вашим предложением, но я получаю сообщение об ошибке в этой строке System.Windows.Application.Current.Dispatcher.Invoke ( нового действия (ShowPath), DispatcherPriority.Background, новая строка [] {путь} –

+0

Я бы написал его как: 'Application.Current.Dispatcher.Invoke (новое действие (() => this.addFile (файл)), DispatcherPriority.Background);' –

+0

получил это Спасибо :) –

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