我想将一些项目添加到作为网格视图的列表视图中。我想通过代码来完成它而不实现绑定选项,只需将值添加到某种单元格集。
我知道这不是 WPF 方式,但我迫切需要这样做,我似乎找不到我正在寻找的答案。
我查看了多绑定、转换器和常规绑定,但它不会给我现在需要的答案。
甚至可能吗?
如果是这样,我该怎么做?
你可以用 aDataGrid
代替 aListView
吗?然后你可以设置AutoGenerateColumns
为true(甚至默认为true)。
<DataGrid x:Name="myDataGrid" AutoGenerateColumns="True"/>
然后在后面的代码中做这样的事情:
myDataGrid.Items = new List<MyDataType>();
foreach(var item in itemsToAdd){
myDataGrid.Items.Add(item);
}
或更短:
myDataGrid.ItemsSource = myListOfItems;
您需要像“[0]”这样的索引绑定。
<Grid>
<ListView x:Name="lv" />
</Grid>
lv.Items.Clear();
var gv = new GridView();
lv.View = gv;
var columns = new List<string> { "col1", "col2" };
for(int index = 0; index < columns.Count; index++)
{
gv.Columns.Add(new GridViewColumn
{
Header = columns[index],
DisplayMemberBinding = new Binding("[" + index.ToString() + "]")
});
}
// Populate list
var row1 = new List<string> { "(1, 1)", "(2, 1)" };
var row2 = new List<string> { "(1, 2)", "(2, 2)" };
lv.Items.Add(row1);
lv.Items.Add(row2);
不要纠结于是否加载代码隐藏中的控件。我参与过主要的 Silverlight 项目,其中混合了两种操作。
public MainWindow()
{
InitializeComponent();
lvPrimary.ItemsSource = new List<string> { "Alpha", "Beta", "Gamma" };
}
Xaml 看起来像这样:
<Window x:Class="WPFStackOverflow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListView Name="lvPrimary" Width="200"/>
</Grid>
</Window>