MVVM - Как я могу программно выбрать представление для моей модели представления? - PullRequest
0 голосов
/ 06 октября 2009

Как я могу выбрать представление для моей модели представления без использования кода позади? Я хочу загрузить ListBox с большим количеством данных, поступающих от вызова WCF. Используя приложение Джоша Смита, представление загружается до того, как данные поступают, пустое. Я хочу получить все данные, а затем выбрать вид с вращением, показывающим прогресс.

// Completed Method
void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    DataTemplate dataTemplate = new DataTemplate();
    //Leaderboards_All_View lb_all_view = new Leaderboards_All_View();
    CollectionViewSource collViewSrc = new CollectionViewSource();
    dataTemplate.DataType = "Leaderboards_All_View";
    List<Leaderboards_All> leaderboardList = e.Result as List<Leaderboards_All>;

    allViewModel =
    (from lbData in leaderboardList
     select new LB_Data_All_ViewModel(lbData, lb_All_ViewModel)).ToList();

    foreach (LB_Data_All_ViewModel avm in allViewModel)
    avm.PropertyChanged += this.OnLB_Data_All_ViewModelPropertyChanged;

    this.AllViewModel = new ObservableCollection<LB_Data_All_ViewModel>(allViewModel);
    this.AllViewModel.CollectionChanged += this.OnCollectionChanged;
    collViewSrc.Source = AllViewModel;
    lb_all_view.DataContext = collViewSrc;
}

Ответы [ 2 ]

3 голосов
/ 06 октября 2009

- Как я могу выбрать представление для моей модели представления без использования кода позади?

Определите ваши DataTemplates в xaml (возможно, в ResourceDictionary или в ресурсах представления, например (при условии, что вы объявили vm, пространство имен, содержащее ваши ViewModels, и vw, пространство имен, содержащее ваши представления):

<DataTemplate DataType="{x:Type vm:LB_Data_All_ViewModel}">
  <vw:LB_Data_All_View />
</DataTemplate>

HTH:)

0 голосов
/ 06 октября 2009

Спасибо, но я знаю, как установить его в XAML. Я спрашиваю, как это можно выбрать ПРОГРАММНО в C #.

Когда вызывается _backgroundWorker_RunWorkerCompleted, я хочу выбрать представление с помощью C #. Все решения, которые я видел, включают в себя изменение DataContext в коде позади, но я хочу, чтобы код оставался вне кода (что является точкой MVVM).

Джош Смит упоминает: «В более сложных сценариях возможно программно выбрать представление, но в большинстве ситуаций это не нужно ...», но он никогда не находит примера. Его демонстрационное приложение очень упрощенное.


Nevermind. Не все прыгают сразу! Я нашел другой пост, который имел эту ссылку:

http://wildermuth.com/2009/05/22/Which_came_first_the_View_or_the_Model

Использование третьего класса для «женитьбы» на view и viewModel кажется растущим согласием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...