这里有几个困难。首先,这是我的标记:
<ItemsControl x:Name="TaskBarItems">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Converter={StaticResource groupName}}"
FontWeight="Bold" />
<ItemsControl ItemsSource="{Binding}"
Margin="12 0 0 0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding DisplayName}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
和我的壳牌:
public class ShellViewModel : IShell
{
readonly TaskBarItemViewModel[] taskBarItems;
public ShellViewModel()
{
taskBarItems = new[]
{
new TaskBarItemViewModel {GroupName = "Animal", DisplayName = "Monkey"},
new TaskBarItemViewModel {GroupName = "Animal", DisplayName = "Cat"},
new TaskBarItemViewModel {GroupName = "Animal", DisplayName = "Dog"},
new TaskBarItemViewModel {GroupName = "Mineral", DisplayName = "Biotite"},
new TaskBarItemViewModel {GroupName = "Mineral", DisplayName = "Phlogopite"},
new TaskBarItemViewModel {GroupName = "Mineral", DisplayName = "Lepidolite"},
};
}
public IEnumerable<IGrouping<string, TaskBarItemViewModel>> TaskBarItems
{
get
{
return taskBarItems.GroupBy(t => t.GroupName).ToList();
}
}
}
Calibrun Micro (cm) 将按照约定绑定 itemscontrol、TaskBarItems。但是,由于几个原因,其余部分无法按惯例工作。它在 DataTemplate 中,所以我们通常会使用 Bind.Model。但是,它在这里不起作用,因为 itemscontrol 中每个项目的类型都是通用的(IGrouping)。默认约定无法处理为此查找视图。所以我们提供了一个内联的数据模板。
其次,Key 属性似乎是作为显式接口实现的。这意味着 Silverlight 无法绑定到它。我做了一个简单的转换器,它绑定到组并提取密钥:
public class GroupNameConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((IGrouping<string,TaskBarItemViewModel>)value).Key;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
接下来,由于分组本身就是 IEnumerable,我们必须直接绑定嵌套项目控件的 ItemsSource。我们不能使用约定,因为 IGrouping 上没有返回项目的属性。(虽然如果有,我们可能仍然会遇到显式接口问题。)
关于你的第二个问题。您可以将操作绑定到任何事件。请参阅此处的文档:
http ://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation