【问题标题】:Cannot bind my Converter class in my XAML command that pass parameter无法在传递参数的 XAML 命令中绑定我的 Converter 类
【发布时间】:2020-02-14 11:30:10
【问题描述】:

这是我的XAML,它试图让我的ListView 将参数传递给ViewModel 命令。

xmlns:mvvm="http://www.galasoft.ch/mvvmlight"


<ListBox x:Name="MyListView" ItemsSource="{Binding Objects}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <mvvm:EventToCommand Command="{Binding MyCommand}"
                                    PassEventArgsToCommand="True"
                                    EventArgsConverter="{StaticResource ParamConverter }"
                                    EventArgsConverterParameter ="{Binding Name}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这是我的转换器:

public class ParamConverter : IEventArgsConverter
{
    public object Convert(object value, object parameter)
    {
        var args = (SelectionChangedEventArgs)value;

        var name = parameter as string;

        return (string)name.ToString();
    }
}

但我收到以下错误:

无法解析资源“ParamConverter”

【问题讨论】:

    标签: xaml mvvm


    【解决方案1】:

    您的转换器未在 XAML 中声明,您应该添加类似

    <ListBox.Resources>
      <yournamespace:ParamConverter x:Key="ParamConverter"/>
    </ListBox.Resources>
    

    在您的列表框标签内。

    编辑:我根本不是专家,所以如果有的话,请忍受我的“不精确”术语。我认为您缺少一些东西:没有任何魔法可以让您的 XAML 了解您的 C#。您需要告诉 XAML 在您的代码中的某处(在 yournamespace 中)会有一个 ParamConverter 对象,可以在 xaml 中使用 ParamConverter 引用该对象钥匙。 您可以按照建议在 ListBox 标记内本地声明您的资源,或者在需要时在外部范围内声明您的资源。 在 XAML 中声明资源后,您可以通过 StaticResource 访问它。

    【讨论】:

      猜你喜欢
      • 2011-12-30
      • 2017-02-19
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多