我有3个不同的DATA
将加载动态到_ListView
。使用DATA1
,我需要添加更多的列,以便在每一行中显示checkbox控件。
我不能让它工作,输出显示CheckBox为字符串,如下所示
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文件的情况下实现这一点?
发布于 2019-02-21 15:32:25
您必须在模板中添加复选框
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
在上面使用测试数据的示例中,替换为原始数据
发布于 2019-02-21 02:09:07
这可能会帮助您实现所需的内容,尽管这里的逻辑效率不是很高。
<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])
});
}
}
https://stackoverflow.com/questions/54791972
复制相似问题