gpt4 book ai didi

c# - WPF 在 TabControl 的 DataTemplate 中绑定(bind)不同的 UserControl

转载 作者:行者123 更新时间:2023-11-30 21:41:23 27 4
gpt4 key购买 nike

作为 WPF 和 MVVM 的新手,我正在努力在 TabControl 中应用 MVVM 模式。我会给你一个我正在努力实现的例子。

TabOne xaml 及其 View 模型

<UserControl x:Class="TestTabControl.TabOne"
xmlns:local="clr-namespace:TestTabControl"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock Text="tab one ..." FontWeight="Bold" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</UserControl>

//TabOne ViewModel
class TabOne : ViewModelBase
{
public string TabName
{
get
{
return "TabOne";
}
}
}

TabTwo xaml 及其 View 模型

<UserControl x:Class="TestTabControl.TabTwo"
xmlns:local="clr-namespace:TestTabControl"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock Text="tab two ..." FontWeight="Bold" FontSize="14" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</UserControl>

//TabTwo ViewModel
class TabTwo : ViewModelBase
{
public string TabName
{
get
{
return "TabTwo";
}
}
}

最后是 MainWindow xaml 及其 View 模型

<Window x:Class="TestTabControl.MainWindow"
xmlns:local="clr-namespace:TestTabControl"
mc:Ignorable="d"
Title="Test Tab Control" MinWidth="500" Width="1000" Height="800">
<TabControl ItemsSource="{Binding TabViewModels}" >
<TabControl.ItemTemplate >
<!-- header template -->
<DataTemplate>
<TextBlock Text="{Binding TabName}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
?????????
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Window>


//MainWindow ViewModel
class MainWindowViewModel : ViewModelBase
{
private ObservableCollection<ViewModelBase> _tabViewModels;

public MainWindowViewModel()
{
_tabViewModels = new ObservableCollection<ViewModelBase>();
TabViewModels.Add(new TabOne());
TabViewModels.Add(new TabTwo());
}

public ObservableCollection<ViewModelBase> TabViewModels
{
get
{
return _tabViewModels;
}
set // is that part right?
{
_tabViewModels = value;
RaisePropertyChanged(() => TabViewModels);
}
}
}

我应该在 DataTemplate 中写什么?我可以在此 DataTemplate 中传递 TabOne 和 TabTwo 的用户控件,以便获得我单击的每个选项卡的 View 吗?或者我需要编写另一个 DataTemplate 吗?

最佳答案

您现在可能已经知道答案了。但是为了其他人的利益,你需要做的是:

    <Grid Margin="10">
<Grid.Resources>
<DataTemplate DataType="{x:Type local:TabOne}">
<local:UserControlOne/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:TabTwo}">
<local:UserControlTwo/>
</DataTemplate>
</Grid.Resources>
<TabControl Margin="10"
ItemsSource="{Binding TabViewModels}">
</TabControl>
</Grid>

请注意TabOne ViewModel 的用户控件也被命名为TabOne。我将其更改为 UserControlOne。这同样适用于 UserControlTwo。

关于c# - WPF 在 TabControl 的 DataTemplate 中绑定(bind)不同的 UserControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43410133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com