使用WPF MVVM风格。尝试创建包含可单击项目的RibbonGallery由于某种原因,我无法让这些项目启动我的委派命令
XAML代码:
<RibbonMenuButton LargeImageSource="Images/DeleteUser1.png" Label="Delete">
<RibbonGallery>
<RibbonGalleryCategory ItemsSource="{Binding AvailibleUsers}" Header="User List">
<RibbonGalleryCategory.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="Images/DeleteUser1.png" Width="25"/>
<ContentPresenter Content="{Binding}" Grid.Column="1">
<ContentPresenter.InputBindings>
<MouseBinding MouseAction="LeftClick" Command="{Binding CommandDeleteAllPermissions}"/>
</ContentPresenter.InputBindings>
</ContentPresenter>
</Grid>
</DataTemplate>
</RibbonGalleryCategory.ItemTemplate>
</RibbonGalleryCategory>
</RibbonGallery>
</RibbonMenuButton>已将datacontext设置为视图模型。ViewModel:
public DelegateCommand CommandDeleteAllPermissions { get { return new DelegateCommand(Delegated_DeleteAllPermissions); } }
private void Delegated_DeleteAllPermissions(object obj)
{
\\todo:stuff
}我已经使用一个标准按钮测试了这个命令,并触发了它,但是使用特定的XAML代码,我无法在RibbonGallery控件中获得可单击的项。
有什么想法吗?
发布于 2015-07-21 15:09:07
图库是某种分类列表,其中的项目可以检查。当您需要一个选项菜单时,它们是合适的,用户应该选中/取消选中项目:

这是用于数据绑定库和示例视图模型的XAML:
<RibbonMenuButton Label="FooGallery">
<RibbonGallery>
<RibbonGalleryCategory ItemsSource="{Binding GalleryItems}">
<RibbonGalleryCategory.ItemContainerStyle>
<Style TargetType="{x:Type RibbonGalleryItem}">
<Setter Property="Content" Value="{Binding Content}"/>
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</RibbonGalleryCategory.ItemContainerStyle>
</RibbonGalleryCategory>
</RibbonGallery>
</RibbonMenuButton>这里的GalleryItems是这些视图模型的集合:
public class GalleryItem
{
public object Content { get; set; }
public bool IsSelected
{
get { return isSelected; }
set
{
if (isSelected != value)
{
isSelected = value;
// TODO: do something here, when item becomes selected/checked;
// handle property changing instead of commands
}
}
}
private bool isSelected;
}如果你需要下拉菜单来执行一些命令,那么你应该使用常规的RibbonMenuItem:

当菜单项是静态已知的时,应该这样做:
<RibbonMenuButton Label="Foo">
<RibbonMenuItem Header="Bar1" Command="{Binding Bar1Command}"/>
<RibbonMenuItem Header="Bar2" Command="{Binding Bar2Command}"/>
<RibbonMenuItem Header="Bar3" Command="{Binding Bar3Command}"/>
</RibbonMenuButton>当对菜单项使用ItemsSource时,XAML将如下所示:
<RibbonMenuButton Label="Foo" ItemsSource="{Binding MenuItems}">
<RibbonMenuButton.ItemContainerStyle>
<Style TargetType="{x:Type RibbonMenuItem}">
<Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="Command" Value="{Binding Command}"/>
</Style>
</RibbonMenuButton.ItemContainerStyle>
</RibbonMenuButton>其中MenuItems是以下视图模型的集合:
public class MenuItemVm
{
public object Header { get; set; }
public ICommand Command { get; set; }
}发布于 2015-07-22 07:14:04
看,我想要绑定项目的源代码。因为项目源频繁更改。要这样做,我必须将我的字符串集合修改为一个自定义对象,并让每个对象也包含一个ICommand或其他对象。这也需要让ViewModel程序员改变他的东西。
因为我只是想改变一下视图。
我刚做了这件事
<RibbonMenuButton LargeImageSource="Images/DeleteUser1.png" Label="Delete" ItemsSource="{Binding AvailibleUsers}">
<RibbonGallery Command="{Binding CommandDeleteAllPermissions}">
<RibbonGalleryCategory ItemsSource="{Binding AvailibleUsers}" Header="User List">
<RibbonGalleryCategory.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="Images/DeleteUser1.png" Width="25"/>
<ContentPresenter Content="{Binding}" Grid.Column="1"/>
</Grid>
</DataTemplate>
</RibbonGalleryCategory.ItemTemplate>
</RibbonGalleryCategory>
</RibbonGallery>
</RibbonMenuButton>我只需要在这里添加命令
<RibbonGallery Command="{Binding CommandDeleteAllPermissions}">现在,库中的所有项目在单击时都会触发该命令。
感谢所有帮助我们的人
https://stackoverflow.com/questions/31531740
复制相似问题