C # Динамический ListView с CheckBox - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть 3 разных DATA, которые будут загружаться динамически до _ListViewDATA1 мне нужно добавить больше столбца для отображения флажка в каждой строке.

Я не могу заставить его работать, вывод показывает CheckBox в виде строки, как показано ниже

screenshot

деталь файла CS:

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:

<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файл

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы должны добавить флажок в шаблоне

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"
                }
           );
        }

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

в приведенном выше примере, используя данные испытаний, заменить исходными данными

0 голосов
/ 20 февраля 2019

Это, вероятно, должно помочь вам достичь того, что вам нужно, хотя логика здесь не очень эффективна.

<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

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])
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...