WPF: WrapPanel 容器的資料繫結(動態生成控制元件、遍歷)
阿新 • • 發佈:2019-02-16
問題:
有一些CheckBox需要作為選項新增到頁面上,但是數目不定。而為了方便排版,我選擇用WrapPanel面板來作為父容器。那現在的問題就是如何把這些控制元件新增到這個WrapPanel裡了。我想到了兩個方法,第一個是先得到控制元件數目,然後再動態生成並載入到這個WrapPanel裡,第二個是設定資料繫結。我想第一個是可行的,但是專案中還涉及到其它問題,所以這裡就選擇第二個了。問題來了,在WrapPanel中並沒有可以用來設定繫結並實現動態生成的東西,那要怎麼解決了?
辦法:
新建一個ItemsControl控制元件,併為ItemsSource繫結資料來源,然後把ItemsControl.ItemsPanel設定為WrapPanel ,最後為ItemsControl.ItemTemplate中的CheckBox.Content繫結資料。
eg:
1、建立資料來源型別。
public class business
{
public string txt { get; set; }
}
2、設定資料來源
public MainWindow() { this.InitializeComponent(); List<business> che = new List<business>() { new business() { txt = "選項1"}, new business() { txt = "選項2"}, new business() { txt = "選項3"}, new business() { txt = "選項4"}, new business() { txt = "選項5"}, new business() { txt = "選項6"}, new business() { txt = "選項7"} }; ItemsControl.ItemsSource = che; }
3、Xaml中
除錯一下就OK了。<ItemsControl x:Name="itemsControl" Background="#B28BB2F1"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <WrapPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <Border Padding="3"> <WrapPanel> <CheckBox Content="{Binding txt}"/> </WrapPanel> </Border> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl>
下一篇告訴你怎麼遍歷這個DataTemplate,並判斷哪些checkBox被選中了。