这个问题已经回答了几次,但我似乎无法将解决方案放在一起。我下面的内容是我通过各种论坛粘在一起的内容。我也是WPF的新手。我试图根据一些参数切换MainWindow.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属性应该是什么?这段代码还有什么问题吗?感谢。
答案 0 :(得分:0)
绑定源应该是您的视图模型,而不是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); }
}