2012-01-05 9 views
0

私はDataGridを.Net3.5で使用しており、ユーザーが切り替えることができるいくつかの異なるデータソースを表示しています。各データソースは新しいDataGridを使用しますが、その背後にあるコードはすべて共通ですので、データの真の内容を知ることはできません。 DataGridのItemsSource内のオブジェクトへのヘッダータイトルとバインディングは、DataGridが初めて作成されたときにリンクするXMLファイルによって制御されます。DataGrid 'no data'行:BindingExpressionパスエラー

DataGridの行で水平スクロールバーが消えない問題も解決しました。これは、結果が不足している可能性のあるフィルタを適用するために、ヘッダーをスクロールできるようにする必要があるためです。これは、現在バインドされているコレクションが行を返さないことが分かった場合に、EmptyRowのコレクションを追加するConverterを介して行われます。

私の問題は、このEmptyRowには標準の行に保持されているプロパティが含まれていないため、DataGridに追加されるたびに明示的にバインディングパスエラーが発生します。空白行。

誰も正しい方向に向けることができない場合、私はバインディングの問題を抱かない方がいいです。

更新 - 常に1行を返すために、コンバータ

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のコンバータであり、元のコレクションはいくつかのコレクションタイプの1つになります。その結果、EmptyRowはDataGridが期待するように設定されているプロパティを満たしていないため、常にバインディングの問題が発生します。

答えて

0

最終更新日ごとに更新されました。

私はここで2つのオプションが見ることができます:

  1. は、すべてのオブジェクトのプロパティ名の明確なリストを作成し、EmptyRowに追加します。厄介なように聞こえますが、うまくいくでしょう。この方法であなたは普遍的なオブジェクトを得るでしょう。欠点は、実際のオブジェクトを変更するたびにEmptyRowを最新の状態に保つ必要があることです。

  2. はexpandosに、あなたのオブジェクトを変更し、そうではなく

    文字列PropertyName意味 { GETを持つ

    。 get;場所にあなたが常に未知の性質のために何かを返すことができた

    object Property[string propertyName] 
    { 
        get { ... } 
        set { ... } 
    } 
    

}

は、インデクサなどを持っています。そうすれば、単一の値ごとにConverterを使用する必要があります。

+0

私はすでに 'real'コレクションにエントリが検出されないと、単一のEmptyRowオブジェクトのコレクションを返すコンバーターを持っています。これをBinding.DoNothingに変更すると、EmptyRowが返されず、行がなくなり、元の水平スクロールバーの問題が返されます。それがあなたが意図したものでない限り? – Jason

+0

あなたのEmptyRowをグリッドに強制するにはどうしたらいいですか?私はあなたのグリッドのItemsSourceコレクションにダミーアイテムを追加していると思っていたでしょう(その場合は、コンバーターとは対照的にサービスを使用する方が近づきます)。あなたは縛らないでください。 –

+0

は、(IMultiValueConverter実装の)変換メソッドを表示するように元の質問を更新しました。うまくいけば、それは私が何をしたのかを示す。私は実際にどのタイプの行が現在特定のデータグリッドにあるのかわからないので、EmptyRowがあるのです。 – Jason

関連する問題