C# WPF DataGrid自定义列(非templateColumn)
有没有人有关于如何创建自定义datagrid列的适当功能示例?我想制作一个具有更多可绑定属性(即值、小数、单位)的。我不想使用模板列 我的主要问题是我无法弄清楚如何在我的控件中获得适当的datacontext。我继承了DataGrid的上下文,无法深入到每行的单个项 我为控件添加了依赖项属性,但是当它们尝试绑定到父集合上的属性时,结果就是null 好的,下面是我的一个尝试:C# WPF DataGrid自定义列(非templateColumn),c#,wpf,datagrid,C#,Wpf,Datagrid,有没有人有关于如何创建自定义datagrid列的适当功能示例?我想制作一个具有更多可绑定属性(即值、小数、单位)的。我不想使用模板列 我的主要问题是我无法弄清楚如何在我的控件中获得适当的datacontext。我继承了DataGrid的上下文,无法深入到每行的单个项 我为控件添加了依赖项属性,但是当它们尝试绑定到父集合上的属性时,结果就是null 好的,下面是我的一个尝试: using System.Windows; using System.Windows.Controls; using Sy
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using Project.Common.Converters;
namespace Project.Areas.Schedule
{
public class ColumnTest2 : DataGridColumn
{
public static readonly DependencyProperty UnitProperty = DependencyProperty.Register("Unit", typeof(string), typeof(ColumnTest), new PropertyMetadata(default(string)));
public string Unit
{
get { return (string)GetValue(UnitProperty); }
set { SetValue(UnitProperty, value); }
}
public static readonly DependencyProperty DecimalCountProperty = DependencyProperty.Register("DecimalCount", typeof(int), typeof(ColumnTest), new PropertyMetadata(default(int)));
public int DecimalCount
{
get { return (int)GetValue(DecimalCountProperty); }
set { SetValue(DecimalCountProperty, value); }
}
public static readonly DependencyProperty QuantityProperty = DependencyProperty.Register("Quantity", typeof(decimal), typeof(ColumnTest), new PropertyMetadata(default(decimal)));
public decimal Quantity
{
get { return (decimal)GetValue(QuantityProperty); }
set { SetValue(QuantityProperty, value); }
}
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
if (Quantity == null || DecimalCount == null || Unit == null)
return null;
TextBlock cellElement = new TextBlock();
var valueBinding = new MultiBinding
{
Converter = new QuantityToStringMultiValueConverter(),
Bindings =
{
new Binding{Source = dataItem, Path=Quantity.Path},
new Binding{Source = dataItem, Path=DecimalCount.Path},
new Binding{Source = dataItem, Path=Unit.Path},
}
};
cellElement.SetBinding(TextBlock.TextProperty, valueBinding);
return cellElement;
}
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem)
{
return null;
}
}
}
用法:
<DataGrid ItemsSource="{Binding ScheduleLines}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding CustomerName}" Header="Normal Column"/>
<schedule:ColumnTest2 Quantity="{Binding DeliveredQuantity}" DecimalCount="{Binding Decimals}" Unit="{Binding Unit}" Header="Custom Column"/>
</DataGrid.Columns>
</DataGrid>
如果您在visual studio中尝试此操作,您将看到,在“普通”列上,intellisense知道我们正在查看项级别上的项,而在我们新尝试的自定义列上,intellisense建议父级上的项(这也是真实的运行时-因此它找不到属性)
PS:converter类可以在这里找到:请展示一些代码,您已经做了什么?我尝试了各种方法,但老实说,到目前为止,我没有什么可以展示的,我知道至少是rightPost您的数据模型代码。也许还有一张你想要达到的目标的照片。如果我们不得不猜测的话,这是很难帮助我们的。PostedI还添加了一些xaml代码,说明我希望如何使用它。