如何在不使用代码的情况下为我的viewmodel选择视图?我想加载一个包含来自WCF调用的大量数据的ListBox。使用Josh Smith的应用程序,视图在数据到达之前加载,为空。我想接收所有数据,然后选择带有微调器显示进度的视图。
// 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;
}
答案 0 :(得分:3)
- 如何在不使用代码的情况下为我的viewmodel选择视图?
在xaml中定义您的DataTemplates(可能在ResourceDictionary中,或在View的资源中,如(假设您已声明'vm',包含ViewModels的命名空间和'vw',包含您的Views的命名空间):< / p>
<DataTemplate DataType="{x:Type vm:LB_Data_All_ViewModel}">
<vw:LB_Data_All_View />
</DataTemplate>
HTH:)
答案 1 :(得分:0)
谢谢,但我知道如何在XAML中设置它。我问如何在C#中编程选择它。
调用_backgroundWorker_RunWorkerCompleted时,我想用C#选择视图。我见过的所有解决方案都涉及到后面的代码中更改DataContext,但我希望将代码保留在代码之后(这是MVVM的重点)。
Josh Smith提到“在更复杂的场景中,可以以编程方式选择视图,但在大多数情况下这是不必要的......”但他从未提供过示例。他的演示应用非常简单。
没关系。不要大家一下子跳进来!我找到了另一个有这个链接的帖子:
http://wildermuth.com/2009/05/22/Which_came_first_the_View_or_the_Model
使用第三个类“结婚”视图和viewModel似乎是一个上升的共识。