2

私は、WPF ユーザー コントロールをホストする一種のベース WPF アプリケーションを作成しています。これは、アセンブリに含まれます (後でこれはアドインになります)。アプリケーションとユーザー コントロールは MVVM に従っています。残念ながら、私は WPF と MVVM を初めて使用するので、スペシャルについてはあまり詳しくありません。私はたくさん検索しましたが、私を助けてくれるものは何もありませんでした(または解決策を理解していませんでした。それは可能かもしれません)。

したがって、私のアプリケーションには、ユーザー コントロールの基本機能と、メニュー バーとユーザー コントロールのプレースホルダーに分割されたウィンドウが含まれています。これは私がこれまでに持っているものです。VersionControl コントロールを選択するボタンがあります。これは、ユーザー コントロールをロードする MainWindow の viewModel で関数を呼び出しますが、MainWindow に表示されません。

<Grid DataContext="{StaticResource Windows1ViewModel}">
        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
    <Canvas Grid.Row="0"                >
        <Button Content="VersionControl"
                Style="{StaticResource ButtonStyle1}"
                HorizontalAlignment="Center"
                Command="{Binding LoadVersionControl}" />
    </Canvas>
    <Canvas Grid.Row="1">
        <ItemsControl Name="ControlCanvas" />
    </Canvas>
</Grid>

ViewModel の定義:

public ICommand LoadVersionControl { get { return new DelegateCommand(OnLoadVersionControl); } }

しかし、OnLoadVersionControl 関数で何をする必要があるのでしょうか? VersionControlView と VersionControlViewModel がありますが、アプリケーションに表示する方法がわかりません。助けてくれて本当にありがとうございます、

マイク

4

1 に答える 1

1

RelayCommand と ICommand の組み合わせを使用して、XAML にバインドします。以下を ViewModel に入れ、DataContext を設定することを忘れないでください!

 // Execute method here
 private void LoadVersionControl(object param) {
      // do stuff here (if you are binding to same view Model for your MainWindow)
      //MainWindow.TextBoxInput.Visibility = Visibility.Visible
 }

 // Controls conditions to allow command execution
 private bool LoadVersionControlCanExecute(object param) { return true; }

 // Relay Command for method
 public RelayCommand _LoadVersionControl;

 // Property for binding to XAML
 public ICommand LoadVersionControlCommand {
      get {
           if(_LoadVersionControl == null) {
                _LoadVersionControl = new RelayCommand(LoadVersionControl, LoadVersionControlCanExecute);
           }

           return _LoadVersionControlCommand;
      }
 }
于 2012-11-16T14:35:42.800 に答える