有一對夫婦的困難在這裏。首先,這裏是我的標記:
<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微(釐米)將綁定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我們要嵌套的ItemsControl的ItemsSource時直接綁定。我們不能使用約定,因爲沒有屬性返回項目的IGrouping。 (雖然如果有,我們可能仍然有明確的接口問題。)
關於你的第二個問題。您可以將操作綁定到任何事件。在這裏看到的文檔: http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Actions&referringTitle=Documentation
對不起,這是你需要它之後的4個月。 – 2010-09-08 15:07:09
感謝您提供詳盡的答案,這對其他人來說是有用的,當然,我也學到了很多東西,這些東西將會再次得到體驗:) – Jan 2010-09-09 17:17:39