C# WPF TabControl 模板继承问题

时间:2021-03-20 13:42:32

标签: c# wpf mvvm

我使用 TabItem 创建 TabControl 以在选项卡之间切换。当我将新元素添加到列表 ObservableCollection 项目时,会显示新选项卡。我必须在 TabItemViewModel 中向 LanguageTextViewModel 添加继承,因为 IDE 向我显示信息

<块引用>

BindingExpression 路径错误:找不到“languageTexts”属性 '对象' ''TabItemViewModel'

问题是选项卡显示正确,但我的标签应该只有 AppName.TabItem.ViewModel 但我在 XAML 数据上下文中将它添加到 LanguageTextViewModel。

 <TabControl ItemsSource="{Binding Path=languageTexts}">
 <TabControl.DataContext>
     <local:LanguageTextViewModel/>
 </TabControl.DataContext>

XAML:

    <Grid>
    <Grid.DataContext>
        <local:TabControlViewModel/>
    </Grid.DataContext>
    <TabControl ItemsSource="{Binding Items}">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <TabItem Header="{Binding Name}" IsSelected="{Binding IsSelected}" MouseLeftButtonUp="TabItem_MouseLeftButtonUp">
                    <TabControl ItemsSource="{Binding Path=languageTexts}">
                        <TabControl.DataContext>
                            <local:LanguageTextViewModel/>
                        </TabControl.DataContext>
                        <TabControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <Label Content="{Binding Path=ownedVersion}" HorizontalAlignment="Left" Margin="10,5,0,0" VerticalAlignment="Top" FontSize="18"/>
                                </StackPanel>
                            </DataTemplate>
                        </TabControl.ItemTemplate>
                    </TabControl> 
                </TabItem>
            </DataTemplate>
        </TabControl.ItemTemplate>
    </TabControl>

</Grid>

C# TabControlViewModel

    public class TabControlViewModel
{
    public ObservableCollection<TabItemViewModel> Items { get; set; } = new ObservableCollection<TabItemViewModel>
     {
                new TabItemViewModel {Name="Tab 1", IsSelected = true },
                new TabItemViewModel {Name="Tab 2" },
                new TabItemViewModel {Name="Tab 3" },
                new TabItemViewModel {Name="Tab 4" },
     };
}

C# TabItemViewModel

    public class TabItemViewModel : LanguageTextViewModel
{
    public string Name { get; set; }
    private bool isSelected;

    public bool IsSelected
    {
        get { return isSelected; }
        set
        {
            isSelected = value;
            DoSomethingWhenSelected();
        }
    }
    private void DoSomethingWhenSelected()
    {
        if (isSelected)
            Debug.WriteLine("You selected " + Name);
    }
}

C# LanguageTextViewModel

 public class LanguageTextViewModel
{
    public ObservableCollection<LanguageTexts> languageTexts { get; private set; } = new ObservableCollection<LanguageTexts>();
}

C# 语言文本

 public class LanguageTexts : INotifyPropertyChanged
{
    private string _ownedVersion;
    public string ownedVersion
    {
        get
        {
            return _ownedVersion;
        }
        set
        {
            if (value != _ownedVersion)
            {

                _ownedVersion= value;
                OnPropertyChanged();
            }
        }
    }

0 个答案:

没有答案
相关问题