如何在 C# 和 WPF 中从 itemsource/list 创建 tabitem 标头?

问题描述 投票:0回答:1

当 JSON 文件中有可观察的集合时,我尝试为 tabitem 创建标头,如下面的代码所示。

// Deserialize the JSON array into a List<ModelClass>
List<Model> dataList = JsonConvert.DeserializeObject<List<Model>>(messagecontent);

// Convert List<ModelClass> to ObservableCollection<ModelClass>
ObservableCollection<Model> observableCollection = new ObservableCollection<Model>(dataList);

Dispatcher.Invoke(() =>
{
    TabitemSub.Items.Clear();
    TabitemSub.ItemsSource = observableCollection;

    foreach (var item in observableCollection)
    {
        TabItem tabitem = new TabItem();
        tabitem.Header = item.property1;
        TabitemSub.Items.Add(tabitem);
    } 
}

我的Xaml:

            <GroupBox Grid.Row="1" Header="Groupbox1:" BorderThickness="2" FontWeight="Bold" FontSize="15" BorderBrush="Black" Margin="5">
                <Grid HorizontalAlignment="Stretch" Width="Auto">
                    <TabControl>
                        <TabItem Header="TabitemMain">
                            <TabControl x:Name="TabitemSub" Height="500" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="5">
                            </TabControl>
                        </TabItem>

但是每次我运行代码而不是给我一串 property1 时,我都会继续获取模型的路径,例如每个项目结果中的 project.MVVM.Model.Model 。为什么会发生这种情况?我该如何解决这个问题?

谢谢你

c# wpf tabcontrol tabitem
1个回答
0
投票

如果我进行以下更改,则设法使其正常工作:

Dispatcher.Invoke(() =>
{
    TabitemSub.Items.Clear();

    foreach (Model item in datalist)
    {
        TabItem tabitem = new TabItem();
        tabitem.Header = item.property1;
        TabitemSub.Items.Add(tabitem);
    } 
}

然后它将为每个 property1 值创建选项卡。

© www.soinside.com 2019 - 2024. All rights reserved.