将自定义控件类绑定到ListView / GridView作为ListViewItem

时间:2014-03-13 23:19:32

标签: wpf listview data-binding

我在将ListView / GridView中的数据绑定到ListViweItem时面临一些问题。

要求:必须在每行显示一个复选框,Label,DropDown和一个文本框,以获取来自所有不同来源的数据。这是示例类:

class Data {
    public CheckBox chk_box;
    public Label lbl;
    public ComboBox cmb_box;
    public TextBox t_box;

    public Data(String lbl_Data,List<String> cmb_box_Data) {
        chk_box=new CheckBox();
        lbl=new Label();
        lbl.Content=lbl_Data;
        cmb_box=new ComboBox();
        cmb_box.ItemsSource=cmb_box_Data;
        chk_box.Click += new RoutedEventHandler(chk_box_clicked);
        ...
    }
    private void chk_box_clicked(object Sender, RoutedEventArgs e){
        if(chk_box.IsChecked == true) cmb_box.IsEnabled = false;
        else cmb_box.IsEnabled = true;
    }
}

现在我需要将这个类'对象作为ListViewItem,ListView / GridView中每列的每个控件 - 一行一行地动态地添加,然后在用户进行选择之后再次逐行访问所有行并从这些行中获取值控件。

XAML代码:

<ListView x:Name="TestGrid"> <ListView.View> <GridView> <GridViewColumn Header=" Select "/> <GridViewColumn Header=" Label "/> <GridViewColumn Header=" cmb_box "/> <GridViewColumn Header=" t_box "/> </GridView> </ListView.View> </ListView>

由于所有控件的Items Source不同,我无法使用ListView.ItemsSorce绑定数据。请提供合适的选项或完成所需UI的方法。我想从VS中给出的控件中解决所有问题,而不使用第三方dll(如果可能的话)。

提前感谢您的时间和建议。

1 个答案:

答案 0 :(得分:0)

检查msdn.microsoft.com是否有绑定

public class Datum
{
    public bool Select { get; set; }
    public string Name { get; set; }
    public List<string> Items { get; set; }
}

<ListView ItemsSource="{Binding}">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="Select">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox IsChecked="{Binding Path=Select, Mode=OneWay}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Name">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Name, Mode= OneWay}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Name">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Path=Items}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>