Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将treeview绑定到对象_C#_Wpf_Data Binding - Fatal编程技术网

C# 将treeview绑定到对象

C# 将treeview绑定到对象,c#,wpf,data-binding,C#,Wpf,Data Binding,WPF有点新,所以我只是想了解一下TreeView上下文中的一些绑定。首先,一些代码 在我的主窗口中,我添加了我的名称空间 xmlns:WPFFM="clr-namespace:WPFFM" 我的班级,我正试图通过类型绑定 namespace WPFFM { public class Asset { public string ID; public string name; public string room;

WPF有点新,所以我只是想了解一下TreeView上下文中的一些绑定。首先,一些代码

在我的主窗口中,我添加了我的名称空间

xmlns:WPFFM="clr-namespace:WPFFM"
我的班级,我正试图通过类型绑定

namespace WPFFM
{
    public class Asset
    {
        public string ID;
        public string name;
        public string room;
        public string description;

        public Asset(string AssetID, string AssetName, string AssetRoom, string AssetDescription)
        {
            ID = AssetID;
            name = AssetName;
            room = AssetRoom;
            description = AssetDescription;
        }
    }
}
我的主要班级有我的名单和它的人口

namespace WPFFM
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        DBConnector dbConnector;
        public static List<Asset> assetList;

        public MainWindow()
        {
            InitializeComponent();
            Populate();
        }

        public void Populate()
        {
            assetList = new List<Asset>();
            dbConnector = new DBConnector();
            DataTable assetDatatable = new DataTable();


            assetDatatable = dbConnector.GetAssets();

            foreach (DataRow row in assetDatatable.Rows)
            {
                Asset assetToAdd = new Asset(row["assetID"].ToString(), row["assetName"].ToString(), row["assetRoomID"].ToString(), row["assetDescription"].ToString());
                assetList.Add(assetToAdd);
            }


            //assetTreeView.ItemsSource = assetList;

        }

    }
}
名称空间WPFFM
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
DBConnector-DBConnector;
公共静态列表资产列表;
公共主窗口()
{
初始化组件();
填充();
}
公共空白填充()
{
assetList=新列表();
dbConnector=新的dbConnector();
DataTable assetDatatable=新DataTable();
assetDatatable=dbConnector.GetAssets();
foreach(assetDatatable.Rows中的DataRow行)
{
Asset assetToAdd=新资产(行[“assetID”].ToString(),行[“assetName”].ToString(),行[“AssetRoMid”].ToString(),行[“assetDescription”].ToString());
资产列表添加(assetToAdd);
}
//assetTreeView.ItemsSource=assetList;
}
}
}
最后是我的treeview XAML

TreeView x:Name="assetTreeView"   ItemsSource="{Binding assetList}">
                                    <TreeView.ItemTemplate>
                                        <HierarchicalDataTemplate  DataType="{x:Type WPFFM:Asset}" ItemsSource="{Binding assetList}">

                                            <Grid Background="LightSkyBlue"  Margin="2" Width="100" Height="24">

                                                <TextBlock Margin="2" Text="{Binding name}" VerticalAlignment="Center" FontWeight="Bold" />
                                            </Grid>

                                        </HierarchicalDataTemplate>
                                    </TreeView.ItemTemplate>
                                </TreeView>
TreeView x:Name=“assetTreeView”ItemsSource=“{Binding assetList}”>
我尝试了很多方法来绑定,但我没有任何运气。根据我收集的信息,我将树状视图绑定到资产列表(我的类),并将我的数据类型绑定到资产列表。然后,我试图显示从我的资产类公开的“name”属性。我真的不确定我错在哪里。我错过了一些愚蠢的简单的东西吗


编辑:忽略某些函数可能需要从mainwindow.xaml.cs和诸如此类的位置移动的事实,我现在不讨论结构。

WPF绑定的所有内容都必须是属性,而不是字段。
这里缺少的另一件事是DataContext初始化。没有它,绑定将无法工作。

add
DataContext=this到您的
主窗口
ctor。请同时阅读以下内容:为什么这么多人不断抨击
MVVM
(因为它确实有效)。我正在阅读MVVM的内容:)就像我说的,我正在尝试绑定的内容@Viv添加这一行仍然没有解决我的问题:/恐怕你不能绑定到静态字段。使
assetList
成为一个属性(而不是静态属性),如@Viv所说,添加
DataContext=this
。它应该可以工作。将我的列表以及我的资产字段更改为属性,它可以工作:)将我的类字段更改为属性后,工作起来就像一个符咒:)