xXxRevolutionxXx Ответов: 1

Передать объект-потомок в качестве параметра команды


- Привет ! Поэтому я создаю приложение WPF, используя архитектурный шаблон MVVM. Внутри этого приложения у меня есть listview. Я привязал событие SizeChanged окна к команде, используя этот фрагмент кода XAML:
<i:EventTrigger EventName="SizeChanged">
            <i:InvokeCommandAction Command="{Binding WindowSizeChangedCommand}"/>
        </i:EventTrigger>


Теперь я хочу передать этой команде параметр, который является шириной listview.

Я попытался сделать это следующим кодом:

<i:EventTrigger EventName="SizeChanged">
            <i:InvokeCommandAction Command="{Binding WindowSizeChangedCommand}" CommandParameter="{Binding Width, ElementName=listView}"/>
        </i:EventTrigger>

Дело в том, что это не работает ! Ха-ха-ха-ха, я знаю, как найти объект-предок с помощью XAML. Но я не знаю, как сделать наоборот. Есть идеи, что делать ?? Большое вам спасибо за ваше время !

Что я уже пробовал:

<pre><i:EventTrigger EventName="SizeChanged">
            <i:InvokeCommandAction Command="{Binding WindowSizeChangedCommand}" CommandParameter="{Binding Width, ElementName=listView}"/>
        </i:EventTrigger>

J. Calhoun

Как выглядит ваша WindowSizeChangedCommand? Кроме того, Совет, была проблема, что CommandParameter нужно было объявить перед командой, я не уверен, была ли эта проблема решена или какую версию вы используете, но попробовать стоит... но с командой paramater, объявленной первой, ретранслятор должен иметь что-то вроде "new RelayCommand(param => WindowSizeChange(param)); param будет командным параметром, который вы передали.

Кроме того, я обнаружил, что использование width дало мне NaN, но свойство "фактическая ширина" дало мне фактическое число.

1 Ответов

Рейтинг:
0

J. Calhoun

<i:EventTrigger EventName="SizeChanged">
            <i:InvokeCommandAction Command="{Binding WindowSizeChangedCommand}" CommandParameter="{Binding ElementName=listView, Path=ActualWidth}"/>
        </i:EventTrigger>


public RelayCommand WindowSizeChangedCommand
{
    get
    {
        if (WindowSizeChangedCommand == null)
                WindowSizeChangedCommand = new RelayCommand(param => WidowSizeChanged(param));

            return WindowSizeChangedCommand;
    }
}

public void WindowSizeChanged(object param)
{
    int width = Convert.ToInt32(param);
}


Я попробовал этот точный код, поместив триггер события под тег & lt;window>, и он работает для меня.