我有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