代码之家  ›  专栏  ›  技术社区  ›  Tigraine

将命令绑定到ListView中的按钮Caliburn.微型

  •  12
  • Tigraine  · 技术社区  · 14 年前

    我正在尝试创建一个类似MDI选项卡式界面的界面,以便在左侧有一个导航窗格(一个列表框),在右侧有一个ContentPresenter。

    我有一个ShellViewModel,上面有一个名为AvailAbleScreens的BindableCollection,我成功地用ListViews数据模板绑定到该列表:

    <ListView x:Name="AvailableScreens">
        <ListView.ItemTemplate>
            <DataTemplate>
                <WrapPanel>
                    <BulletDecorator />
                    <Button x:Name="DisplayView">
                        <TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
                    </Button>
                </WrapPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    

    在MdiViewModel类中,该按钮有以下代码:

    public bool CanDisplayView()
    {
        return true;
    }
    
    public void DisplayView()
    {
        MessageBox.Show("Hello");
    }
    

    无论如何,目前Shell的ViewModel非常简单:

    ShellViewModel
     * AvailableScreens
        -MdiViewModel1
        -MdiViewModel2
     * CurrentActiveScreen
    

    你知道我该怎么做吗卡利伯恩。微型?Rob Eisenberg在Twitter上向我建议,我可能想从Caliburn.微型在进入成熟的Caliburn框架之前。

    1 回复  |  直到 14 年前
        1
  •  20
  •   Dirk Vollmar    12 年前

    不幸的是,我们不能自动将约定应用于DataTemplates的内容。原因是我们无法拦截WPF/Silverlight的模板创建机制。要解决这个问题,您有两个选择:

    1. 不要在DataTemplates内部使用约定;使用显式绑定和消息。附加相反

    2. 使用 Bind.Model UIElement 像这样的数据模板 Bind.Model="{Binding}"