wpf中模板的访问方法
我正在使用带有caliburn微框架的WPF来实现MVVM模式。 我创建了一个弹出窗口,在列表框中填充了自定义按钮。 现在我想在单击其中一个按钮时调用ViewModel中的一个方法,但迄今为止我尝试的每种方法都失败了 这里,注释中的代码在调用我的方法的意义上工作,但参数始终为nullwpf中模板的访问方法,wpf,xaml,caliburn.micro,Wpf,Xaml,Caliburn.micro,我正在使用带有caliburn微框架的WPF来实现MVVM模式。 我创建了一个弹出窗口,在列表框中填充了自定义按钮。 现在我想在单击其中一个按钮时调用ViewModel中的一个方法,但迄今为止我尝试的每种方法都失败了 这里,注释中的代码在调用我的方法的意义上工作,但参数始终为null <ListBox x:Name="lst" ItemsSource="{Binding OperatingModes}" ItemTemplate="{DynamicResource DataTemplate
<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>
这是我正在使用的模板。无论何时调用此方法,都找不到方法SelectMode的目标。如您所见,我尝试了不同的方法,尽管我不确定是否正确使用了TargetWithoutContext调用。
据我所知,我需要以某种方式将我的模板绑定到普通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>
如果您需要单击事件,那么您可能会绑定Button的命令并使用CommandParameter={Binding},这应该可以做到。我不需要单击事件,使用按钮只是最简单的方法,因为我可以重用打开弹出窗口的按钮的样式。使用Commandand CommandParameter也会导致相同的错误。如果可以在按钮上看到正确的名称,则设置CommandParameter={Binding}将把完整的数据项推送到命令,CommandParameter={Binding name}将发送name属性的值。您是否可以分享一份复制该问题的工作样本?我可以帮你修一下吗。或者,您至少可以发布命令实现,并确认命令是否正在执行。我还注意到,DataTemplate中没有为ListBox定义ItemTemplate,但是StackPanel似乎是它的子项。这看起来有点奇怪。@pushpraj我不确定我能不能生成一个工作示例,因为这是一个不小的项目的一部分,我还需要发布至少几个助手类。我最初使用,但后来意识到我可以用ListBox做同样的事情,这样做的好处是不需要2D输入数组,并且实现了SelectedItem。因此,也许我对xaml代码做了一点修改,但它仍然有效。@pushpraj基于我上面的代码,您的命令建议的实现如上所示,只有按钮打开标记如下:。SelectMode是我的ViewModel中的方法名称,但该方法从未被调用。