簡體   English   中英

在XAML中的樹視圖上綁定2層數據

[英]Binding 2 layer data on a treeview in XAML

XAML noobie在這里! 這就是我現在得到的:

  • MachineList,是Machine對象的列表(我制作的自定義類)
  • 每台機器內部都有一個驅動器列表(驅動器是另一類)

現在,我需要列出這些內容,並讓用戶檢查一些機器或驅動器,並顯示一些驅動器信息。 我的第一個目標是將我的計算機列表綁定到Treeview(用於根元​​素)和1級兒童的Drives,但是我真的做不到!

這是我在做什么:

<TreeView ItemsSource="{Binding MachineList}" Name="treeView1">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding DriveList}">
            <TextBlock Text="{Binding driveName}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

在這里,我如何用C#代碼聲明MachineList:

public ObservableCollection<MyContainerClass.Machine> MachineList{ get; set; }

正如我在調試過程中可以驗證的那樣,我的MachineList包含正確的數據(即使DriveList正確填充),但Treeview上沒有任何顯示。 DriveList是一個ObservableCollection<MyContainerClass.Drive>對象。

我究竟做錯了什么?

如下設置HierarchicalDataTemplate的ItemTemplate。

<TreeView ItemsSource="{Binding MachineList}" Name="treeView1">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding DriveList}">
                    <TextBlock Text="{Binding machineName}" />
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding driveName}" />
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

更新(我嘗試過的代碼對我有用):

public class Machines
    {
        private string machinename;

        public string machineName
        {
            get { return machinename; }
            set { machinename = value; }
        }
        private ObservableCollection<DriveList> driveList;

        public ObservableCollection<DriveList> DriveList
        {
            get { return driveList; }
            set { driveList = value; }
        }


    }

    public class ViewModel
    {
        private ObservableCollection<Machines> machines;

        public ObservableCollection<Machines> MachineList
        {
            get { return machines; }
            set { machines = value; }
        }
        public ViewModel()
        {
            ObservableCollection<DriveList> list= new ObservableCollection<DriveList>();
            list.Add(new DriveList() { driveName = "Drive 1" });
            machines = new ObservableCollection<Machines>();
            machines.Add(new Machines() { machineName = "Machine 1", DriveList =list  });
        }
    }

    public class DriveList
    {
        private string drivename;

        public string driveName
        {
            get { return drivename; }
            set { drivename = value; }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM