Проблема OneWayToSource в Silverlight и UpdateSource - PullRequest
1 голос
/ 06 мая 2011

Я сталкиваюсь с некоторыми проблемами, связывающими 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.

...