首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CheckBox的C#动态ListView

使用CheckBox的C#动态ListView
EN

Stack Overflow用户
提问于 2019-02-21 01:17:20
回答 2查看 356关注 0票数 0

我有3个不同的DATA将加载动态到_ListView。使用DATA1,我需要添加更多的列,以便在每一行中显示checkbox控件。

我不能让它工作,输出显示CheckBox为字符串,如下所示

CS文件的详细信息:

代码语言:javascript
运行
复制
public void DataLoad1()
{


            var rowDT = data.GetListData();

            string[] str = new string[rowDT.Columns.Count];

            // loop data
            foreach (DataRow row in rowDT.Rows)
            {
                for (int i = 0; i <= rowDT.Columns.Count - 1; i++)
                {
                    str[i] = row[i].ToString();
                }


                // create checkbox
                CheckBox chk = new CheckBox
                {
                    // checkbox properties
                    Content = str[0],
                    IsChecked = false,
                    IsEnabled = true
                };

                _listView.Items.Add(
                    new
                    {
                        chkBox  = chk,
                        DocNo   = str[0],
                        QtyReq  = str[1],
                        Price   = help.ThousandSeparator(str[2]),
                        Date    = help.ConvertDate(str[3]),
                        Status  = help.ConvertStatus(str[4]),
                        Confirm = help.ConvertConfirmed(str[5])
                    }
               );

            }
        }

以下是XAML文件的详细信息:

代码语言:javascript
运行
复制
<ListView x:Name="_listView" Height="365" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
                        <ListView.ItemContainerStyle>
                            <Style TargetType="{x:Type ListViewItem}">
                                <Setter Property="BorderBrush" Value="LightGray" />
                                <Setter Property="BorderThickness" Value="0,0,1,1" />
                            </Style>
                        </ListView.ItemContainerStyle>
                    </ListView>

有没有可能在不编辑XAML文件的情况下实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-21 15:32:25

您必须在模板中添加复选框

代码语言:javascript
运行
复制
var gridView = new GridView();

        FrameworkElementFactory FEF = new FrameworkElementFactory(typeof(CheckBox));
        FEF.AddHandler(CheckBox.ClickEvent, new RoutedEventHandler(CheckBox_CheckChanged), true);
        Binding CBG = new Binding("DocNo");
        FEF.SetBinding(CheckBox.ContentProperty, CBG);

        Binding SBG = new Binding
        {
            Path = new PropertyPath("chkBox"),
            Mode = BindingMode.OneWay,
        };
        FEF.SetBinding(CheckBox.IsCheckedProperty, SBG);

        gridView.Columns.Add(new GridViewColumn()
        {
            Header = "CheckBox",
            CellTemplate = new DataTemplate() { VisualTree = FEF }
        });

        gridView.Columns.Add(new GridViewColumn() { Header = "DocNo", DisplayMemberBinding = new Binding("DocNo") });
        gridView.Columns.Add(new GridViewColumn() { Header = "QtyReq", DisplayMemberBinding = new Binding("QtyReq") });
        gridView.Columns.Add(new GridViewColumn() { Header = "price", DisplayMemberBinding = new Binding("Price") });

        _listView.View = gridView;

        for (int i = 0; i < 5; i++)
        {
            _listView.Items.Add(
                new
                {
                    chkBox = true,
                    DocNo = i + "test",
                    QtyReq = i + "test",
                    Price = i + "test"
                }
           );
        }

creating-wpf-check-list-box-using-c-sharp-code-behind

在上面使用测试数据的示例中,替换为原始数据

票数 1
EN

Stack Overflow用户

发布于 2019-02-21 02:09:07

这可能会帮助您实现所需的内容,尽管这里的逻辑效率不是很高。

代码语言:javascript
运行
复制
<ListView x:Name="_listView" 
    Height="365" 
    Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Setter Property="BorderBrush" Value="LightGray" />
            <Setter Property="BorderThickness" Value="0,0,1,1" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                           <CheckBox Content="{Binding DocNo}" IsChecked="{Binding Checked, Mode=OneWay}"/>  
                       </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding DocNo}" Header="Request Number" />
                <GridViewColumn DisplayMemberBinding="{Binding QtyReq}" Header="Requested to UL" />
                <GridViewColumn DisplayMemberBinding="{Binding Price}" Header="Price" />
                <GridViewColumn DisplayMemberBinding="{Binding Date}" Header="Date" />
                <GridViewColumn DisplayMemberBinding="{Binding Status}" Header="Status" />
                <GridViewColumn DisplayMemberBinding="{Binding Confirm}" Header="Received" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

和cs

代码语言:javascript
运行
复制
public void DataLoad1()
{
    var rowDT = data.GetListData();

    // loop data
    foreach (DataRow row in rowDT.Rows)
    {
        var str = row.Select(o => o.ToString()).ToList();

        _listView.Items.Add(new {
            Checked = false,
            DocNo   = str[0],
            QtyReq  = str[1],
            Price   = help.ThousandSeparator(str[2]),
            Date    = help.ConvertDate(str[3]),
            Status  = help.ConvertStatus(str[4]),
            Confirm = help.ConvertConfirmed(str[5])
        });
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54791972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档