我有DataGrid
,它绑定到DataTable
,因为我不知道编译时的列数量。在绑定到DataTable时更改DataGrid上的空值外观
XAML
<Window.Resources>
<wpfApplication1:MainWindowViewModel x:Key="ViewModel" />
</Window.Resources>
<Grid DataContext="{StaticResource ViewModel}">
<DataGrid x:Name="MyDataGrid"
ItemsSource="{Binding Path=DataTable}" />
</Grid>
MainWindowViewModel.cs
class MainWindowViewModel : INotifyPropertyChanged
{
private DataTable dt;
public event PropertyChangedEventHandler PropertyChanged;
public MainWindowViewModel()
{
DataTable table = new DataTable();
table.Columns.Add("Foo", typeof(int));
table.Columns.Add("Bar", typeof(string));
table.Rows.Add(1, "first");
table.Rows.Add(2, null);
DataTable = table;
}
private void OnPropertyChanged(string s)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(s));
}
}
public DataTable DataTable
{
get { return dt; }
set
{
dt = value;
OnPropertyChanged("DataTable");
}
}
}
结果是:
单元格中没有任何值与null
值。 我的问题是:我怎样才能将null
值的所有单元格更改为' - '而无需更改源DataTable
。
我不能使用转换器进行绑定,因为它会尝试转换所有DataTable
而不是值。 我还没有运气DataGridCell
样式也因为我不知道如何获取数据值并更改它。
Edit
我的最终解决方案是基于一个答案。我创建MyDataGrid
类并覆盖OnAutoGeneratingColumn
方法。
class MyDataGrid : DataGrid
{
protected override void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e)
{
var textColumn = e.Column as DataGridTextColumn;
if (textColumn != null)
{
var binding = textColumn.Binding;
binding.TargetNullValue = "-";
}
base.OnAutoGeneratingColumn(e);
}
}
我只是猜测在这里...我们可以继承DataTable并使用这个新的DataTable类型进行绑定吗? – Savaratkar
@theinsaneone我不明白它可以如何帮助 –
哦sry ...下面的答案是最好的办法...我为这个解决方案做得太过分了:P我的坏... – Savaratkar