地基系列九 wpf_MVVM_009 創建樹形節點

創建樹形節點:
(1):聲明樹形節點類,用於存儲節點圖標、名稱、類型、ID、子集合。
(2):在XAML中構建好TreeView資源,用於顯示節點數據。
(3):在邏輯代碼中自定義樹形節點數據,賦值給類;
(4):給TreeView的ItemSource賦值。
例子:
(1)
//在文件夾“_10Base”,聲明TreeView類,存儲圖標、名字、葉節點集合
public class TV
{
public string TvIcon { get ; set ; }
public string TvName { get ; set ; }
public List TvList { get ; set ; }
}
(2)
注意:【1】在命名空間中加上對類“TV()”的引用, 我把它命名爲 " myTree " , 例子,
<UserControl x:Class=“客戶端._07Basice.UserControl3”

xmlns:myTree=“clr-namespace:客戶端._10Base”

<TreeView Name="myTreeView">
	<TreeView.Resources>
		<HierarchicalDataTemplate DataType="{x:Type myTree:TV }" 
				           ItemsSource = "{ Binding TvList , Mode = TwoWay , UpdateSourceTrigger=PropertyChanged }">
			<StackPanel Orientation="Horizontal" Margin="0,2" >
				<Image Height="18" Source="{ Binding TvIcon,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }">
				</Image>
				<TextBlock Text="{Binding TvName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged }">
				</TextBlock>
			</StackPanel>
		</HierarchicalDataTemplate>
	</TreeView.Resources>
</TreeView >

注意【1】:新建的類,常常會出現“找不到…”“不存在…” ,需要在確認代碼正確和類的路徑沒有錯誤,然後, “重新生成解決方案”,或者重新啓動"VS"。

(3):
[1]: 先引用命名空間
	using 客戶端._10Base;
[2]:聲明葉節點集合
private static List<TV> TVList1;
private static List<TV> TVList2;
private static List<TV> SelectTreeView()
{
	TVList = new List<TV>();
	for( int i = 0; i < 5 ; i ++ )
	{
		TVList2 = new List<TV>();
		for( int r = 0 ; r < 2 ; r ++ )
		{
			TV tvList2 = new TV();
			tvList2.TvIcon = "/../../Image/Afoot2.png"
			tvList2.TvName = "第二層子節點中的第"+r+"個節點";
			tvList2.TvList = new List<TV>();
			TVList2.Add(tvList2);
		}
		  TV tvList1 = new TV();
           			   tvList1.TvIcon = "/../../Images/Afoot3.png";
          			   tvList1.TvName = "第一層子節點"+i+"";
          			   tvList1.TvList = TVList2;
              		  TVList1.Add(tvList1);
	}
	 List<TV> TV0 = new List<_10Base.TV>()
           		 {
          		      new TV(){
                		    TvIcon = "/../../Images/Afoot1.png",
             		    TvName = "頂層父節點",
                		    TvList = TVList1,
            		    }
         		   };
      	      return TV0;
}
(4)
private void Main()
{
	List<TV> stvTask = SelectTreeView();
	this.myTreeView.ItemsSource = stvTask ;
}

注意:【1】:在(界面)XAML中聲明命名空間 的組成: “項目名稱+文件夾名字”;
與在(邏輯)代碼中聲明命名空間 的組成: “項目名稱+問價夾名字”;
它們兩個是一樣的組成,如果實際存在的類,在命名空間中顯示“不存在…”,就點擊項目,選擇“重新生成解決方案”。
【2】:對於樹形節點的類的字段,可以定義無限個,例子,
public class TV
{
//同時也可以使用構造函數去初始化
public TV()
{
this.TvIcon = “/…/…/需要的默認圖標”;
this.TvName =“默認名字”;
}
public string TvIcon { get; set; }
public string TvName { get; set; }
public List TvList { get; set; }
public TvType TvType { get; set; }
public string TvID { get; set; }
}
public enum TvType
{
TvFather,//根
TvSon,//葉
TvStruct//結構
}
【3】在(界面)中調用類中的成員,使用Binding 關鍵字:

如果調用的字段,在類中找不到,則不顯示內容。而不會報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章