2

MainViewModel にバインドされた MainWindow があります。MainWindow内に、このようにユーザーコントロールを定義しています

<vm:StatPanel DockPanel.Dock="Right" DataContext="{Binding Source={StaticResource viewModel}}" Loaded="StatPanel_Loaded" />

そのユーザーコントロール内に、ボタン付きのデータグリッドがあります。目標は、ボタンがクリックされて MainWindow xaml のデータグリッドが変更されたときです。これは私のユーザーコントロールのデータグリッドがどのように見えるかです

<Button Content="{Binding Path=sector}" Command="{Binding Path=filterGridCommand}"></Button>

アプリケーションを実行すると、次のエラーが表示されます。

System.Windows.Data Error: 40 : BindingExpression path error: 'filterGridCommand' property not found on 'object' ''mdSectorDetail' (HashCode=42410114)'. BindingExpression:Path=filterGridCommand; DataItem='mdSectorDetail' (HashCode=42410114); target element is 'Button' (Name=''); target property is 'Command' (type 'ICommand')

MainViewModel にあるコマンド リレーを使用しています。私の問題は、そのmainViewModelを参照する方法がわからないことです。次のような提案された解決策をいくつか試しました

CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type }}}"

どんな提案も役に立ちます。ありがとうございました。

4

2 に答える 2

1

snoopを使用して、Button の DataContext を調べることができます。あなたの場合、DataContext が間違っていると思います。UserControl のすべてのコードを教えていただければ、適切なデータ ビディングを作成します。

于 2012-05-24T19:47:42.667 に答える
0

そのようなものには空の「マーカー」インターフェースを使用します。

public interface IMyCommandDataContextHelper {}

相対ソースで到達したいデータコンテキストを持つコントロール/ウィンドウは、空のインターフェイスを実装する必要があります。

 public partial class MainWindow : IMyCommandDataContextHelper 

次に、相対ソースを使用して xaml を簡単に作成できます

{Binding Path=DataContext.filterGridCommand, RelativeSource={RelativeSource AncestorType={x:Type local:IMyCommandDataContextHelper}}}

ps: プロパティは PascalCase にする必要があります :)

public ICommand FilterGridCommand {get{...}}
于 2012-05-25T09:51:50.813 に答える