WPF中爲ListView動態綁定數據且添加一列複選框

GetGridViewByFieldManage(ResourceDictionary resources, string moduleName, int groupID)
{
GridView gv = new GridView();
DataTable dt = fieldManageBLL.GetFieldManage(moduleName);
for(int i=0;i<dt.Rows.Count;i++)
{
	if(i==0)
	{
	    GridViewColumn gvc=new GridViewColumn();
	    CheckBox cb = new CheckBox();
          cb.Checked += new RoutedEventHandler(cb_Checked);
          cb.Unchecked += new RoutedEventHandler(cb_Unchecked);
          TextBlock tb = new TextBlock();
            tb.Text = "全選";
            cb.Content = tb;
            _gvc.Header = cb;
            _gvc.Width = 100;
            _gvc.CellTemplate = (DataTemplate)resources["TheCheckBox"];
            gv.Columns.Add(_gvc);
            continue;
	}
	gvc.DisplayMemberBinding = new Binding(dt.Rows[i]["FieldManage_Field"].ToString());
}
return gv;
}

//其中:dt.Rows[i]["FieldManage_Field"].ToString();分別對應以下DataTemplate中的x:Key的值。
	//至於DisplayMemberBinding我才接觸幾天,目前的理解是隻顯示數據沒有其它效果;而CellTemplate則可以在顯示的數據上加上控件的效果,比如CheckBox、Hyperlink等

//XAML代碼:
	<Window.Resources>
	<!-- 複選框 -->
        <DataTemplate x:Key="TheCheckBox">
            <TextBlock VerticalAlignment="Center">
            <CheckBox Name="ckb_SelectAll" Click="ckb_SelectAll_Click" Margin="6 0 0 0">
                <!--<TextBlock  Foreground="White">全選</TextBlock>-->
            </CheckBox>
            </TextBlock>
        </DataTemplate>
        <!-- 序號 -->
        <DataTemplate x:Key="TheIndex">
            <TextBlock Width="100" Text="{Binding Path=TheIndex}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Center"></TextBlock>
        </DataTemplate>
        <!--單據號-->
        <DataTemplate x:Key="StoBill_No">
            <TextBlock Width="150" Text="{Binding Path=StoBill_No}" Tag="{Binding Path=StoBill_ID}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Right" Padding="0,0,20,0"></TextBlock>
        </DataTemplate>
        <!--單據類型-->
        <DataTemplate x:Key="StoBillsType_Name">
            <TextBlock Width="100" Text="{Binding Path=StoBillsType_Name }" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Center"></TextBlock>
        </DataTemplate>
        <!--時間-->
        <DataTemplate x:Key="StoBill_OperationDate">
            <TextBlock Width="150" Text="{Binding Path=StoBill_OperationDate,StringFormat='{}{0:yyyy-MM-dd HH:mm}'}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Left"></TextBlock>
        </DataTemplate>
        <!--應付-->
        <DataTemplate x:Key="StoBill_NotPaid">
            <TextBlock Width="100" Text="{Binding Path=StoBill_NotPaid,StringFormat='N'}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Right" Padding="0,0,20,0"></TextBlock>
        </DataTemplate>
		<!--單據明細-->
        <DataTemplate x:Key="DanjuDetail">
            <TextBlock  TextAlignment="Center" Width="100" >
               <Hyperlink Name="hpl_DanjuDetailListView" Tag="{Binding StoBill_ID}" Click="hpl_DanjuDetailListView_Click">
                <TextBlock x:Name="tbl_DanjuDetail" Text="單據明細" />
               </Hyperlink>
            </TextBlock>
        </DataTemplate>
        <!--結算明細-->
        <DataTemplate x:Key="JieSuanDetail">
            <TextBlock  TextAlignment="Center" Width="100" >
               <Hyperlink Name="hpl_JieSuanDetailListView" Tag="{Binding StoBill_ID}" Click="hpl_JieSuanDetailListView_Click">
                <TextBlock x:Name="tbl_DanjuDetail" Text="結算明細" />
               </Hyperlink>
            </TextBlock>
        </DataTemplate>
      </Window.Resources>

此ListView的ItemsSource就是一個DataTable,不過填充過DataTable後要在此DataTable中再添加一列DataColumn,如下:

SupplierDt.Columns.Add(new DataColumn("TheCheckBox",typeof(CheckBox)));
這樣動態綁定代碼就出來了(假設上面的方法簽名爲:GetGridViewByFieldManage(ResourceDictionary resources, string moduleName, int groupID)):如下:

            GridView gv = GetGridViewByFieldManage(this.Resources, "供應商清賬", MainRoomModel.StaffRightGroupID);
            Ltv_ClearignAccount.View = gv;
            Ltv_ClearignAccount.ItemsSource = dt.DefaultView;
其實這個方法的三個參數只用到了第一個參數,後面兩個都是根據實際應用添加的。

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