Я пытаюсь использовать призму и шаблон MVVM для разработки приложения. В моем пользовательском интерфейсе я определил предыдущую и следующую кнопку. Для использования в вызывающих веб-службах я определил перечисление, которое сообщит мне направление, в котором мне нужно пройти. Таким образом, в этом случае кнопки отображают непосредственно значение перечисления. Определение перечислимого типа очень прост и заключается в следующем:Silverlight 3/Prism - Передача значения enum в качестве параметра команды
namespace CodeExpert.Book.Helpers
{
public enum BookDirection { Previous = -1, NotSet = 0, Next = 1, }
}
Я определил свою команду и делегатом в моем ViewModel и назначен Собственость правильно. Соответствующий код:
public DelegateCommand PreviousNextCommand { get; set; }
public IndexEntriesViewModel(GlobalVariables globalVariable, IndexEntryOperations currentOperator)
{
//a bunch of initialization code.
InitializeCommands();
}
void InitializeCommands()
{
PreviousNextCommand =
new DelegateCommand(OnPreviousNextCommandExecute);
}
private void OnPreviousNextCommandExecute(BookDirection parameter)
{
//Code to process based on BookDirection
}
Таким образом, на основе этой конфигурации, я хочу, чтобы передать значение BookDirection перечисления в CommandParameter. Однако я не могу получить XAML для этого. Вот XAML я попробовал, что кажется наиболее правильным для меня:
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="CodeExpert.Book.Views.Index"
d:DesignWidth="1024"
d:DesignHeight="768"
xmlns:helpers="clr-namespace:CodeExpert.Book.Helpers"
xmlns:command="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation"
xmlns:common="clr-namespace:System.Windows;assembly=System.Windows.Controls"
xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
xmlns:input="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input">
<Button x:Name="ButtonPrevious"
HorizontalAlignment="Left"
Margin="2,1,0,1"
Width="25"
Content="<"
Grid.Column="1"
Grid.Row="1"
Height="20"
command:Click.Command="{Binding Path=CurrentIndexViewModel.PreviousNextCommand}">
<command:Click.CommandParameter>
<helpers:BookDirection.Previous />
</command:Click.CommandParameter>
</Button>
</UserControl>
я не получаю IntelliSense для BookDirection для перечисления и получить ошибку в конструкции & время компиляции произнося «BookDirection» типа не содержит adefinition для 'Предыдущая'. Невозможно передать это перечисление, или я просто что-то пропустил? Теперь я работаю, установив тип параметра string
вместо BookDirection
, но потом мне нужно разобрать текст и код пахнет. Я сделал некоторые поисковые запросы Google, и самое близкое, что я пришел к ответу, - Passing an enum value as command parameter from XAML К сожалению, Silverlight не поддерживает расширение x: static, поэтому я не могу использовать точный метод, описанный в этом ответе.
Любая помощь будет высоко оценена.
Стэн, ваш английский и красноречие были в порядке. У меня на самом деле был этот проект на заднем плане, но ожидаем, что он снова появится на этой неделе. Я собираюсь попробовать вашу технику. –
Эй, Стив, мне было интересно, есть ли у вас шанс попробовать это. Мне интересно, если это сработает для вас. –