私は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が期待するように設定されているプロパティを満たしていないため、常にバインディングの問題が発生します。
私はすでに 'real'コレクションにエントリが検出されないと、単一のEmptyRowオブジェクトのコレクションを返すコンバーターを持っています。これをBinding.DoNothingに変更すると、EmptyRowが返されず、行がなくなり、元の水平スクロールバーの問題が返されます。それがあなたが意図したものでない限り? – Jason
あなたのEmptyRowをグリッドに強制するにはどうしたらいいですか?私はあなたのグリッドのItemsSourceコレクションにダミーアイテムを追加していると思っていたでしょう(その場合は、コンバーターとは対照的にサービスを使用する方が近づきます)。あなたは縛らないでください。 –
は、(IMultiValueConverter実装の)変換メソッドを表示するように元の質問を更新しました。うまくいけば、それは私が何をしたのかを示す。私は実際にどのタイプの行が現在特定のデータグリッドにあるのかわからないので、EmptyRowがあるのです。 – Jason