wpf caliburn 组合框选择更改事件异常



我正在尝试与Caliburn Micro一起自学WPF,MVVM。到目前为止一切顺利,但是当我视图中的组合框更改了它的选择时,我试图在我的 ViewModel 中触发事件时遇到了问题。

这是我的观点(在 Xaml 中(:

<Window x:Class="Translator.Views.TranslatorView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:model="clr-namespace:Translator.ViewModels"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    mc:Ignorable="d"
    d:DataContext="{d:DesignInstance Type=model:TranslatorViewModel}"
    Title="Translator" Height="269.301" Width="1030.263"
    xmlns:cal="http://www.caliburnproject.org">

这是我的组合框的 Xaml:

<ComboBox Name="StoreCombo" Grid.Column="3" Grid.Row="0" Margin="10" Height="25"     SelectedValue="{Binding Type}" 
cal:Message.Attach="[Event SelectionChanged] = [StoreSelectionChanged]"
cal:Action.Target="{Binding ElementName=StoreCombo, Path=DataContext}">
</ComboBox>

这是我在视图模型中的事件:

public void StoreSelectionChanged(object sender, SelectionChangedEventArgs args)
{
}

但是,在运行应用程序并更改选择时,我收到此异常:

"WindowsBase 中发生了类型为'System.Exception'的未处理异常.dll其他信息:找不到方法存储选择更改的目标。如果存在此异常的处理程序,则可以安全地继续该程序。

试图用谷歌搜索这个,但到目前为止,我无法弄清楚我需要做什么。

谁能帮我?

非常感谢

  <ComboBox Name="StoreCombo" SelectedValue="{Binding Type}" 
         cal:Message.Attach="[Event SelectionChanged] = [StoreSelectionChanged]"
         cal:Action.Target="{Binding ElementName=StoreCombo, Path=DataContext}">
  </ComboBox>

(1(:目标已经是数据上下文,所以只需一起删除这一行即可。

    cal:Action.Target="{Binding ElementName=StoreCombo, Path=DataContext}"         
(

2(卡利本备忘单,如果不需要(发件人,事件参数(

   cal:Message.Attach="[Event SelectionChanged] = [Action StoreSelectionChanged]"

(2.1( 如果你想要事件参数

   cal:Message.Attach="[Event SelectionChanged] = [Action StoreSelectionChanged($eventArgs)]"

(2.2(如果你想要发送方事件参数

   cal:Message.Attach="[Event SelectionChanged] = [Action StoreSelectionChanged($this,$eventArgs)]" 

删除方法中的方法参数,因为您没有向方法传递任何参数。

将其更改为:

public void StoreSelectionChanged()
{
}

另外,附带说明一下,由于您已经绑定SelectedValue ViewModel 中的属性,因此不需要此事件。将代码放在 SelectedValue 的属性设置器中。

最新更新