PropertyGroupDescription只是GroupDescription的一個實現。你可以推出自己的。事實上,我們可以推出一個用於一般用途:
public class LambdaGroupDescription<T> : GroupDescription
{
public Func<T, object> GroupDelegate { get; set; }
public LambdaGroupDescription(Func<T, object> groupDelegate)
{
this.GroupDelegate = groupDelegate;
}
public override object GroupNameFromItem(object item, int level, System.Globalization.CultureInfo culture)
{
return this.GroupDelegate((T)item);
}
}
然後將其添加到PagedCollectionView:
var pageView = new PagedCollectionView(items);
pageView.GroupDescriptions.Add(new LambdaGroupDescription<ViewModel>(
vm => vm.Description.Split(' ').FirstOrDefault()
));
this.DataGrid.ItemsSource = pageView;
編輯
看來您的分組邏輯是多一點點比簡單的分裂複雜。你可以嘗試這樣的:
public string FormatColor(string color)
{
if (string.IsNullOrWhiteSpace(color)) return null;
if (color.ToUpperInvariant().StartsWith("RED"))
return "Red";
if (color.ToUpperInvariant().StartsWith("GREEN"))
return "Green";
return color;
}
然後:
pageView.GroupDescriptions.Add(new LambdaGroupDescription<ViewModel>(
vm => FormatColor(vm.Description.Split(' ').FirstOrDefault() as string)
));
在FormatColor方法,你也可以用字典來「奇怪」的顏色值映射到已知的那些:
private static readonly Dictionary<string, string> ColorMap = new Dictionary<string, string>(){
{"Greenlike", "Green"},
{"Reddish", "Red"},
};
public string FormatColor(string color)
{
if (string.IsNullOrWhiteSpace(color)) return null;
if (ColorMap.ContainsKey(color))
return ColorMap[color];
return color;
}
我創造自己的課程的另一種方法運作良好。謝謝。我嘗試了第一種方法,但不知道如何訪問我的數據源中的「Desc」列 – user1384831