2012-03-15 4 views
1

私はUserControl "SubjectListView"を持っています。バインディングは、SubjectListViewModel内のObservableCollectionである "AllSubjects"に設定されます。名前を取得してコマンドを実行するために使用されます。名前は取得されますが、SubjectListViewModelにもあるコマンドはボタンでは実行されませんが、スコープ外で動的に作成されないボタンでは機能します。MVVM複数のバインディングをユーザーコントロール

解決策はありますか?そのために

<StackPanel> 
    <ItemsControl ItemsSource="{Binding AllSubjects}"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Button Width="100" Content="{Binding Name}" <!-- Is working--> 
        Command="{Binding InvasionCommand}" <!--Is NOT working--> /> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
    <Button Content="Check for Invasion" Width="120" Command="{Binding InvasionCommand}" <!-- Is working-->/> 
</StackPanel> 
+1

はあなたの最も外側の '' StackPanel'のxを与えます。あなたのコマンドバインディングでは、 'ElementName'を使って名前付き' StackPanel'に指示してから、 'Path = DataContext.InvasionCommand'を実行してください。 –

+0

@jbergerこれは今働いています:) – Spalatum

答えて

2

問題は(私はそう思う)InvasionCommandがあなたのviewmodelであること、ですが、あなたはのItemsSourceの実際の要素にしています。..

、私はElementSpyを使用しますが、私は思いますhttp://www.nbdtech.com/Free/WpfBinding.pdf

それとも、あなたはのStackPanelに名前Containerを与えた場合、あなたがフォローをバインドすることができます:それはここでは、すべての可能なバインディングの概要を持っているあなたはRelativeSourceを使用している場合..

に動作しますINGの:NAME`:

Binding ElementName=Container, Path=DataContext

+0

StackPanelを設定してElementNameを設定しました。今働いている。 – Spalatum

関連する問題