这个问题已经回答过几次了,但我似乎不能把解决方案放在一起。下面是我通过各种论坛粘在一起的东西。我也是WPF的新手。我正在尝试切换主窗口的内容。基于Xaml的一些参数。我有的:
<Window.Resources>
<DataTemplate x:Key="LogsGriDataTemplate" DataType="{x:Type viewModel:ViewModel1}">
<Label>This is a log</Label>
</DataTemplate>
<DataTemplate x:Key="ReportsGridDataTemplate" DataType="{x:Type viewModel:ViewModel2}">
<Label>This is a report</Label>
</DataTemplate>
</Window.Resources>
<ContentControl Grid.Row="1" Grid.Column="0" Content="{Binding CurrentPageViewModel}" />
private ViewModel1 _viewModel1 = new ViewModel1();
private ViewModel2 _viewModel2 = new ViewModel2();
private DataTemplate _CurrentPageViewModel;
public DataTemplate CurrentPageViewModel
{
get { return _CurrentPageViewModel; }
set { Set(() => CurrentPageViewModel, ref _CurrentPageViewModel, value); }
}
public void OnButtonPressMethod(object param)
{
if (view == 0)
{
CurrentPageViewModel = _viewModel1;
}
else
{
CurrentPageViewModel = _viewModel1;
}
}
编译器正在抱怨CurrentPageViewModel = _viewModel1/2语句说你不能将ViewModel类型设置为DataTemplate类型,这是有意义的。CurrentPageViewModel属性应该是什么?这段代码还有什么问题吗?谢谢。
绑定源应该是您的视图模型,而不是DataTemplate
。XAML中的DataTemplate
与DataType
定义将自动将内容绑定到与类型匹配的数据模板。
所以你可以为视图模型创建一个公共接口/基类1 &2:
public interface IViewModel { }
public class ViewModel1 : IViewModel { }
public class ViewModel2 : IViewModel { }
private IViewModel _viewModel1 = new ViewModel1();
private IViewModel _viewModel2 = new ViewModel2();
private IViewModel _CurrentPageViewModel;
public IViewModel CurrentPageViewModel
{
get { return _CurrentPageViewModel; }
set { Set(() => CurrentPageViewModel, ref _CurrentPageViewModel, value); }
}