改变题目的内容类型

  • 本文关键字:类型 改变 c# wpf xaml
  • 更新时间 :
  • 英文 :


这个问题已经回答过几次了,但我似乎不能把解决方案放在一起。下面是我通过各种论坛粘在一起的东西。我也是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中的DataTemplateDataType定义将自动将内容绑定到与类型匹配的数据模板。

所以你可以为视图模型创建一个公共接口/基类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); } 
}

最新更新