我使用listview来显示数据,如数据矩阵(列和行)。我的问题是:输入我的项目:MatrixCellVM。 我尝试了在网上找到的所有内容,在这些项目上应用了DataTemplate,但没有任何效果。
这是我正在使用的最新技术
foreach (var col in dataMatrix.Columns)
{
//create the data template
DataTemplate cellLayout = new DataTemplate();
cellLayout.DataType = typeof(MatrixCellVM);
//set up the stack panel
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(Grid));
spFactory.Name = "myComboFactory";
//set up value textblock
FrameworkElementFactory cellValue = new FrameworkElementFactory(typeof(TextBlock));
cellValue.SetBinding(TextBlock.TextProperty, new Binding("Value"));
cellValue.SetValue(TextBlock.ToolTipProperty, "Value");
spFactory.AppendChild(cellValue);
//set the visual tree of the data template
cellLayout.VisualTree = spFactory;
gridView.Columns.Add(new GridViewColumn{
Header = col.Name,
DisplayMemberBinding = new Binding(string.Format("[{0}]", count)),
CellTemplate = cellLayout
});
count++;
}
还有一件事,当我在MatrixCellVM中覆盖ToString()时,会显示该值(但是使用这种技术我会添加一个上下文菜单或为我的值赋予任何颜色。)
答案 0 :(得分:0)
我解决了这个问题,但还有另外一个。
所以我做的很简单。 DisplayMemberBinding和CellTemplate不能放在一起。
所以我删除了创建datatemplate的整个c#代码。
唯一剩下的就是:
gridView.Columns.Add(
new GridViewColumn
{
Header = col.Name,
CellTemplate = (DataTemplate)listView.Resources["MatrixCellVMTemplate"]
});
因此,我在我的xaml代码中添加了定义datatemplate。
我的新问题是我的行是MatrixCellVM的数组(因为它是一个矩阵,我没有属性,我不知道预先会有多少列。)
这是我顶部帖子中DisplayMemberBinding = new Binding(string.Format(“[{0}]”,count))代码的重点。
如何在我的datatemplate中重现此行为(我的textblock中的绑定是什么)。
如果不清楚,请告诉我。
由于