2017-10-10 1 views
2

UserControlをViewModelにバインドして、コマンド/イベントを使用したいとします。 私のアプリケーションはContentControlの内部にMainWindowで構成されていて、ナビゲーションの目的でUserControls(実際のコンテンツ)を表示するために使用されます。UserControl内のViewModelへのコマンドのバインド

MainWindow.xaml

<Window> 
    <Window.Resources> 
     <DataTemplate DataType=""> 
      <View: /> 
     </DataTemplate> 
    </Window.Resources> 
    <Menu> 
     <MenuItem Header="Connection" Command="..." /> 
    </Menu> 
    <Grid> 
     <ContentControl Content="{Binding SelectedViewModel}" /> 
    </Grid> 
</Window> 

MainViewModel.cs

class MainViewModel : ViewModelBase { 
    public ICommand MenuCommand; 

    private object _SelectedViewModel; 

    public object SelectedViewModel 
    { 
     get { return _SelectedViewModel; } 
     set 
     { 
      _SelectedViewModel = value; 
      RaisePropertyChanged("SelectedViewModel"); 
     } 
    } 

    public MainViewModel() 
    { 
     ICommand = new RelayCommand(MenuClick); 
    } 

    private void MenuClick(object obj) 
    { 
     SelectedViewModel = new ConnectionViewModel(); 
    } 
} 

これは私のアプリのナビゲーションがどのように動作するかです。唯一の問題は、UserControl自体に コマンド(Buttonなど)を使用することができないことです。

ConnectionView.xaml

<UserControl> 
    <Grid> 
     <Button Command="{Binding ButtonCommand}" Content="Button" /> 
    </Grid> 
</UserControl> 

ConnectionViewModel.cs

class ConnectionViewModel : ViewModelBase { 
    public ICommand ButtonCommand; 

    public ConnectionViewModel() 
    { 
     ButtonCommand = new RelayCommand(ButtonClick); 
    } 

    private void ButtonClick(object obj) 
    { 
     MessageBox.Show("Clicked"); 
    } 
} 

私はUserControlビューでListViewsを埋めることができますが、私はButtonコマンド作業を取得することはできません。正確に何が問題なのですか?どこが間違っていましたか?あなたがフィールドとしてそれを定義している

public ICommand ButtonCommand { get; private set; } 

答えて

4

ButtonCommandは、あなたがそれに特異的に結合することができるようにするためのプロパティでなければなりません

public ICommand ButtonCommand; 
+2

まあ、それは恥ずかしいです。ありがとうございました – Elsbeth

関連する問題