2

Silverlight 4 RIA (エンティティ フレームワーク) アプリケーションを開発していますが、MVVMLight RelayCommand の使用に問題があります。以前は問題なく使用していましたが、ViewModelLocator パターンを実装した後に問題があるようです。

ボタン コントロールのバインドでは問題は発生せず、アプリケーションは実行されますが、ボタン クリックで RelayCommand が起動されません。

Blend で RelayCommand をバインドしようとすると、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
4

1 に答える 1

1

DrawのインスタンスでSelectionCommandを起動しようとすると思います。DataContextProxy相対ソース バインディングなどを使用する必要があります。

于 2011-07-28T15:24:41.710 に答える