さっそく話してみましょう。次のように、いくつかの列が設定された DataGrid があります。
<ctrl:DataGridWithFooter
FooterRowsCount="1"
x:Name="MyGrid"
CanUserDeleteRows="False"
CanUserSortColumns="True"
AutoGenerateColumns="False"
ItemsSource="{Binding Path=Model, UpdateSourceTrigger=PropertyChanged}"
IsEnabled="{Binding Path=Idle}">
<DataGrid.Columns>
<DataGridTextColumn Header="Level"
Binding="{Binding Path=Name, Mode=OneWay}" />
<!--Snip-->
</ctrl:DataGridWithFooter>
そして期待通りのモデル。ただし、アプリケーションが実行されると、モデル内のリスト内の要素を反映する新しい列を追加する状況があるため、次のようなバインディング式を取得します
<DataGridTextColumn Binding="{Binding Path=Attributes[0]}" />
または似たようなもの。表示と並べ替えはそれ自体で問題ありませんが、合計の行を一番下に強制する必要があるという問題に遭遇しました。これを正常に機能させるには、オンラインで見つけたコードを少し使用する必要がありました (ここで入手可能)。 、宣伝どおりに動作します)。しかし、この新しいカスタマイズされた DataGrid クラスのソート クラスが、私のリスト要素バインディングでクラッシュすることがわかりました。私の質問は、このコンストラクターをどのように変更するかです
public PropertyAccessor(Type targetType, string property) {
IsList_ = false;
mTargetType = targetType;
mProperty = property;
PropertyInfo propertyInfo =
targetType.GetProperty(mProperty);
mCanRead = propertyInfo.CanRead;
mCanWrite = propertyInfo.CanWrite;
mPropertyType = propertyInfo.PropertyType;
}
すべての情報を取得するには、リスト要素を反映して並べ替える必要がありますか?