从wpf中的模板访问方法

时间:2014-08-07 08:38:54

标签: wpf xaml caliburn.micro

我使用WPF和caliburn微框架来实现MVVM模式。 我创建了一个弹出窗口,里面填充了ListBox中的自定义按钮。 现在我想在单击其中一个按钮时在我的ViewModel中调用一个方法,但到目前为止我尝试过的每个方法都失败了。

这里注释中的代码在调用my方法的意义上起作用,但参数始终为null。

<ListBox x:Name="lst" ItemsSource="{Binding OperatingModes}" ItemTemplate="{DynamicResource DataTemplate_Level1}" BorderThickness="0" ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="3" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <!--<i:Interaction.Triggers>
        <i:EventTrigger EventName="PreviewMouseLeftButtonDown" >
            <cal:ActionMessage MethodName="SelectMode">
                <cal:Parameter Value="{Binding ElementName=lst, Path=SelectedItem}" />
            </cal:ActionMessage>
        </i:EventTrigger>
    </i:Interaction.Triggers>-->
</ListBox>

这就是我正在使用的模板。每当我打电话给这种方法时,我都会得到&#34;找不到方法SelectMode的目标。&#34;正如你所看到的,我尝试了不同的方法,虽然我不确定我是否正确使用了TargetWithoutContext。 据我所知,我需要以某种方式将我的模板绑定到&#34; normal&#34;的数据上下文。 xaml代码,但到目前为止我失败了。如何正确访问我的方法?

<DataTemplate x:Key="DataTemplate_Level1" x:Name="myListTemplate" >
    <ListBox ItemsSource="{Binding}" BorderThickness="0" ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled">
        <StackPanel Orientation="Vertical" HorizontalAlignment="Center" cal:Bind.Model="{Binding}" cal:Action.TargetWithoutContext="{Binding DataContext, ElementName=lst}">
            <Button Style="{StaticResource InformButton}" Content="{Binding Path=Name}" FontSize="11" BorderBrush="BlueViolet" cal:Message.Attach="SelectMode($dataContext)">
                <!--<i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseRightButtonDown" >
                        <cal:ActionMessage MethodName="SelectMode">
                            <cal:Parameter Value="{Binding ElementName=myListTemplate, Path=SelectedItem.Name}" />
                        </cal:ActionMessage>
                    </i:EventTrigger>
                </i:Interaction.Triggers>-->
            </Button>
        </StackPanel>
    </ListBox>
</DataTemplate>

0 个答案:

没有答案