私は MVVM と MVVM light を初めて使用し、vb.net のバックグラウンドを持っています。学習用の簡単なプロジェクトをいくつか作成できましたが、あるビューではボタンがコマンドを呼び出していません。次のようなビュー xaml があります (読みやすくするために短縮されています)。
<UserControl x:Class="FTC.View.NavigationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:FTC_Application.FTC.ViewModel"
mc:Ignorable="d"
d:DesignWidth="900"
Height="161"
DataContext="{Binding NavigationView, Source={StaticResource Locator}}" >
<UserControl.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</UserControl.Resources>
<Grid>
<Button HorizontalAlignment="Left" Margin="10" VerticalAlignment="Top"
Command="{Binding SwapParent}"
CommandParameter="{Binding Parent1}" Background="{x:Null}" BorderBrush="{x:Null}" Width="130" Height="45">
<TextBlock Text="{Binding Parent1}" Foreground="#FFE4E4E4"/>
</Button>
以下は、ボタン機能のビューモデル クラスのコードです。
Private _sNavs() As String = {"Dashboard", "Jobs", "People", "Products", "Financials", "Admin"}
Private _sParentNavs() As String
Public Property SwapParent As RelayCommand
Private Property ParentNavs() As String()
Get
Return _sParentNavs
End Get
Set(value As String())
If _CurrentParent = String.Empty Then
_CurrentParent = "Dashboard"
Else
If _sParentNavs.Contains(_CurrentParent) = False Then
Return
End If
End If
RefreshParents(_CurrentParent)
RaisePropertyChanged(ParentNavsPropertyName)
End Set
End Property
Public Sub New()
If _CurrentParent = String.Empty Then
_CurrentParent = "Dashboard"
End If
RefreshParents(_CurrentParent)
SwapParent = New RelayCommand(Sub()
ParentNavs = _sParentNavs
End Sub)
End Sub
Private Sub RefreshParents(sCurrent)
If _sNavs.Contains(sCurrent) = True Then
_sParentNavs = Filter(_sNavs, sCurrent, False, CompareMethod.Text)
Else
_sParentNavs = Filter(_sNavs, "Dashboard", False, CompareMethod.Text)
End If
Parent1 = _sParentNavs(0)
Parent2 = _sParentNavs(1)
Parent3 = _sParentNavs(2)
Parent4 = _sParentNavs(3)
Parent5 = _sParentNavs(4)
End Sub
したがって、このコードは、指定された値に基づいて親配列を変更し、指定された値以外のすべての項目を含めることを意図しています。次に、ページ上のボタンに配列値を割り当てます。ボタンのコンテンツ バインディングに関してはすべて機能しますが、何らかの理由でコマンドが実行されません。別のビューモデルでこの正確な方法を使用しましたが、機能します。
これがこのビューモデルで機能しない理由を知るために、助けが必要です
前もって感謝します
ヨルダン王