首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RibbonGallery items命令单击

RibbonGallery items命令单击
EN

Stack Overflow用户
提问于 2015-07-21 14:23:04
回答 2查看 1.4K关注 0票数 1

使用WPF MVVM风格。尝试创建包含可单击项目的RibbonGallery由于某种原因,我无法让这些项目启动我的委派命令

XAML代码:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
    public DelegateCommand CommandDeleteAllPermissions { get { return new DelegateCommand(Delegated_DeleteAllPermissions); } }

    private void Delegated_DeleteAllPermissions(object obj)
    {
          \\todo:stuff
    }

我已经使用一个标准按钮测试了这个命令,并触发了它,但是使用特定的XAML代码,我无法在RibbonGallery控件中获得可单击的项。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-21 15:09:07

图库是某种分类列表,其中的项目可以检查。当您需要一个选项菜单时,它们是合适的,用户应该选中/取消选中项目:

这是用于数据绑定库和示例视图模型的XAML:

代码语言:javascript
复制
            <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是这些视图模型的集合:

代码语言:javascript
复制
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

当菜单项是静态已知的时,应该这样做:

代码语言:javascript
复制
            <RibbonMenuButton Label="Foo">
                <RibbonMenuItem Header="Bar1" Command="{Binding Bar1Command}"/>
                <RibbonMenuItem Header="Bar2" Command="{Binding Bar2Command}"/>
                <RibbonMenuItem Header="Bar3" Command="{Binding Bar3Command}"/>
            </RibbonMenuButton>

当对菜单项使用ItemsSource时,XAML将如下所示:

代码语言:javascript
复制
            <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是以下视图模型的集合:

代码语言:javascript
复制
public class MenuItemVm
{
    public object Header { get; set; }
    public ICommand Command { get; set; }
}
票数 4
EN

Stack Overflow用户

发布于 2015-07-22 07:14:04

看,我想要绑定项目的源代码。因为项目源频繁更改。要这样做,我必须将我的字符串集合修改为一个自定义对象,并让每个对象也包含一个ICommand或其他对象。这也需要让ViewModel程序员改变他的东西。

因为我只是想改变一下视图。

我刚做了这件事

代码语言:javascript
复制
              <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>

我只需要在这里添加命令

代码语言:javascript
复制
<RibbonGallery Command="{Binding CommandDeleteAllPermissions}">

现在,库中的所有项目在单击时都会触发该命令。

感谢所有帮助我们的人

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31531740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档