更改内容类型问题

时间:2014-08-21 15:40:31

标签: c# wpf xaml

这个问题已经回答了几次,但我似乎无法将解决方案放在一起。我下面的内容是我通过各种论坛粘在一起的内容。我也是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属性应该是什么?这段代码还有什么问题吗?感谢。

1 个答案:

答案 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); } 
}