问题:如何对其数据来自转换器的列上的数据网格进行排序?如何对来自转换器的数据进行WPF数据网格排序?
我有类似视图模型:
public class MyViewModel
{
public string Name { get; set; }
public IEnumerable<string> Aliases { get; set; }
}
另外,我有一个映射IEnumerable<string>
只是一个string
自定义转换。
我的DataGrid类似于:
<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上的排序事件 。
有浮动周围建议修改视图模型有一个属性,它类似于一个解决方案:
public class AliasesMapping
{
public IEnumerable<string> Raw { get; set; }
public string Converted { get; set; }
}
但是......我想知道是否有更好或更标准的方法解决这个问题。感觉就像在这个解决方案中,UI限制正在渗入视图模型层。
更新:这是这不是测试的转换器
[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