我在.Net3.5中使用DataGrid
來顯示用戶可以切換的幾種不同數據源。每個數據源都使用一個新的DataGrid,但其背後的代碼對所有這些數據都是通用的,因此不知道數據的真實內容。標題標題和綁定到DataGrid的ItemsSource中的對象由XML文件控制,該文件首次創建DataGrid
時創建鏈接。DataGrid'no data'row:BindingExpression路徑錯誤
我也解決了DataGrid中沒有行導致水平滾動條消失的問題。這是因爲我需要用戶仍然能夠滾動瀏覽標題,以便移除那些可能導致缺乏結果的過濾器。這一切都是通過一個Converter來完成的,如果它發現當前綁定的集合沒有返回任何行,它將添加一個EmptyRow的集合。
我的問題是,這EmptyRow不包含由標準行持有的屬性,所以無論何時將其添加到DataGrid中,顯然都有綁定路徑錯誤,即使這些錯誤不會停止將行添加爲空白行。
無論如何,如果有人能指出我正確的方向,我寧願不要有約束力的問題。
更新 - 轉換器總是返回一行
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length == 2 && values[1] != null)
{
bool isEmpty;
if (bool.TryParse(values[1].ToString(), out isEmpty) && isEmpty)
{
return new List<EmptyRow> {new EmptyRow()};
}
}
return values.FirstOrDefault();
}
值包含當前資源集合,並且該集合的IsEmpty屬性。如果集合爲空,它將返回一個EmptyRow的集合,而不是空集合。這是通用DataGrid的轉換器,原始集合可以是幾種集合類型之一。因此,我總是遇到綁定問題,因爲EmptyRow不滿足DataGrid設置期望的屬性。
我已經有一個轉換器,它在'真正'集合中沒有檢測到條目時返回一個EmptyRow對象的集合。將其更改爲Binding.DoNothing將不會返回EmptyRow,從而導致沒有行以及消失的水平滾動條的原始問題。除非這不是你的意圖? – Jason 2012-01-05 13:28:34
你如何強制你的EmptyRow出現在網格上?我曾以爲你正在爲你的網格的ItemsSource集合添加一個虛擬物品(在這種情況下,與轉換器相比,使用服務更爲合適)。去那條路線你應該得到沒有綁定錯誤。 – 2012-01-05 13:39:58
更新了原始問題以顯示我的轉換方法(在IMultiValueConverter實現中)。希望能夠顯示我所做的。我實際上並不知道目前在任何特定數據網格中哪種類型的行,這就是爲什麼我有EmptyRow。 – Jason 2012-01-05 13:52:57