質問:データを変換元から取得した列のデータグリッドをソートするにはどうすればよいですか?コンバータからのデータにWPFデータグリッドをソートする方法は?
私は似ているビューモデルがあります:
public class MyViewModel
{
public string Name { get; set; }
public IEnumerable<string> Aliases { get; set; }
}
をさらにし、私はちょうどstring
にIEnumerable<string>
をマップするカスタムコンバータを内蔵しています。
私のデータグリッドは次のようになります。
<DataGrid ItemsSource="...">
<DataGrid.Columns>
<DataGridTextColumn Width="10" Header="..." Binding="{Binding Path=Name}" />
<DataGridTextColumn Width="10" Header="..." Binding="{Binding Path=Aliases, Converter={StaticResource myConverter}}" />
...
これまでのところ、とても良いです。期待どおりに表示されます。問題はソートに伴い発生します。
名前でソートすると、すべて問題ありません。コンバーターからのデータを列でソートすると、.NET例外が発生します。
追加されたSortDescriptionsは無効です。列のCanUserSortをfalseに設定するか、または列に SortMemberPathプロパティを使用するか、DataGridでSortingイベント を処理する可能性のある解決策は です。より良い以上の標準的なアプローチがあれば、私は思ったんだけど...
public class AliasesMapping { public IEnumerable<string> Raw { get; set; } public string Converted { get; set; } }
しかし:
はに似ている性質を持つようにビューモデルを変更することを提案することを中心に浮動解決策ありますこれを解決するまでこのソリューションのように、View ModelレイヤーにUIの制限があります。
UPDATEは:ここにこれがテストされていないコンバータ
[ValueConversion(typeof(IEnumerable<string>), typeof(string))]
public class AliasFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string converted = string.Empty;
var val = value as IEnumerable<string>;
if (val != null)
{
var list = new List<string>(val);
list.Sort();
converted = string.Join(",", list);
}
return converted;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
SortMemberPathを設定しようとしましたか? – Tyrsius
{Binding Path = Aliases、Converter = {StaticResource myConverter}}に設定しようとしました。 – jglouie
SorthMemberPathはコンテキスト上のパスになりますが、バインディングを使用したくはありません。 'SortMemberPath = Length'を設定するとどうなりますか? – Tyrsius