パラメーターを渡すXAMLコマンドでConverterクラスをバインドできません

2020-02-14 xaml mvvm

これは、 ListViewパラメーターをViewModelコマンドに渡そうとしている私のXAMLです。

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」を解決できませんでした

Answers

コンバーターはXAMLで宣言されていません。次のようなものを追加する必要があります

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

リストボックスタグ内。

編集:私は全く専門家ではないので、もしあれば私の「不正確な」用語に耐えてください。 XAMLがC#を認識できるようにする魔法はありません。コードのどこか( yournamespace )にParamConverterオブジェクトがあり、 ParamConverterキーでxaml内で参照できることをXAMLに伝える必要があります。 リソースは、推奨されるようにListBoxタグ内でローカルに宣言するか、必要に応じて外部スコープで宣言できます。 リソースがXAML内で宣言されると、 StaticResourceを介してアクセスできます。

Related