Команда ретрансляции MVVM не запускается в приложении Silverlight RIA - PullRequest
2 голосов
/ 28 июля 2011

Я занимаюсь разработкой приложения Silverlight 4 RIA (Entity Framework) и у меня возникают проблемы с использованием MVVMLight RelayCommand.Я использовал их раньше без проблем, но после реализации шаблона ViewModelLocator возникает проблема.

Привязки к элементу управления кнопки не вызывают проблем, и приложение запускается, но нажатие кнопки не вызывает RelayCommand.

Когда я пытаюсь связать RelayCommand в Blend, он не видит свойства SelectionCommand, но может видеть другие, такие как IsBusy.

Есть идеи, что я делаю неправильно?

    <ListBox x:Name="ListBox" ItemsSource="{Binding Draws}" Background="Transparent">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Background="Transparent" HorizontalAlignment="Stretch" Orientation="Vertical" >
                    <telerik:RadButton Background="Transparent" Command="{Binding Path=SelectionCommand}" CommandParameter="{Binding Path=ID}"  >
                        <Image Source="{Binding Path=DrawImage, Converter={StaticResource imgConverter}, TargetNullValue=/NSPCCLotteryDraw;component/Assets/Images/JCBLogo.PNG}" Stretch="UniformToFill"/>
                    </telerik:RadButton>                      
                    <TextBlock Text="{Binding Path=DrawName}" TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Times New Roman" FontSize="20" Margin="5,0,0,0" TextWrapping="Wrap" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <telerik:RadWrapPanel VerticalAlignment="Center" />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>

Imports GalaSoft.MvvmLight
Imports GalaSoft.MvvmLight.Command

Public Class DrawSelectorViewModel
    Inherits ViewModelBase

    Private _dataService As ILotteryDraw

    Private _draws As IEnumerable(Of Draw)

    Private _isBusy As Boolean

    Public Property SelectionCommand As RelayCommand(Of Int32)

    Public Property Draws As IEnumerable(Of Draw)
        Get
            Return _draws
        End Get
        Set(value As IEnumerable(Of Draw))
            _draws = value
            IsBusy = False
            RaisePropertyChanged("Draws")
        End Set
    End Property

    Public Property IsBusy As Boolean
        Get
            Return _isBusy
        End Get
        Set(value As Boolean)
            _isBusy = value
            RaisePropertyChanged("IsBusy")
        End Set
    End Property

    Public Sub New(dataService As ILotteryDraw)
        _dataService = dataService
        SetupCommands()
        LoadAvailableDraws()
    End Sub

    Private Sub SetupCommands()
        SelectionCommand = New RelayCommand(Of Int32)(AddressOf ShowLotteryDraw)
    End Sub

    Private Sub LoadAvailableDraws()
        IsBusy = True
        _dataService.GetActiveDraws(Sub(e) Draws = e)
    End Sub

    Private Shared Sub ShowLotteryDraw(drawID As Int32)
        Stop
    End Sub

End Class

1 Ответ

1 голос
/ 28 июля 2011

Я полагаю, что он попытается запустить SelectionCommand для экземпляра Draw. Вам нужно использовать что-то вроде DataContextProxy или относительную привязку источника .

...