Я сталкиваюсь с некоторыми проблемами, связывающими CommandParameter с его собственной Командой в приложении, построенном с использованием Prism 2.2 в качестве MVVM. Позвольте мне представить, что это происходит.
У меня есть настраиваемый список со свойством NumPageElements и пара кнопок для прокрутки списка, кому это свойство нужно. Упрощенный xaml того, что мне нужно (и работает) в wpf:
<Button x:Name="PageDownButton" Command="{Binding PageDownCommand}" CommandParameter="{Binding ElementName=ItemsListBox, Path=NumPageElements}" />
<Custom:MyOwnListBox x:Name="ItemsListBox" x:NumPageElements="{Binding ElementsPerPage, Mode=OneWayToSource}" >
. . .
</Custom:MyOwnListBox>
Чтобы иметь такое же поведение в Silverlight, я написал это xaml:
<Button Name="PageDownButton" Command="{Binding PageDownCommand}" CommandParameter="{Binding ElementName=ItemsListBox, Path=NumPageElements}" />
<Custom:MyOwnListBox Name="ItemsListBox" NumPageElements="{Binding Path=ElementsPerPage, Mode=TwoWay, UpdateSourceTrigger=Explicit}" >
. . .
</Custom:MyOwnListBox>
PageDownButton - это IApplicationCommand, ElementsPerPage - это свойство, предоставляемое докладчиком.
Теперь, когда я впервые открываю это представление, кнопки, сделанные таким образом, выглядят включенными, но они не «кликабельны». Если я переключаюсь на другое представление и возвращаюсь к представлению с этими кнопками, они, наконец, улавливают правильное поведение. Похоже, что он не инициализируется правильно в первый раз, когда условие команды (на самом деле они должны быть отключены, пока я не вставлю элемент в список), как если бы параметр, заданный через свойство CommandParameter, был инициализирован неправильно. Но я не могу понять, почему переключение между взглядами делает это работает.
Я подозревал, что должен принудительно установить UpdateSource для привязок (я сделал это для ItemsListBox.NumPageElements и для PageDownButton.CommandParameter) после загрузки представления, но выполнение этого в коде позади не помогло.
Что я делаю не так?
Спасибо за любой ответ,
Mat.