2014-05-01 55 views
0
relaycommand

我有一個ItemsControl爲基本的組合框,文本框和按鈕的數組: GUIWPF - 通過參數內的ItemsControl

的XAML對於底部均屬於ItemsControl的:(有問題與按鈕,最後一個元素)

<ItemsControl Grid.Row="2" 
        ItemsSource="{Binding CommandLinesOc}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="*" /> 
        </Grid.ColumnDefinitions> 
        <Label Content="Send Command:" 
          HorizontalAlignment="Right" 
          Grid.Row="1" /> 
        <ComboBox Grid.Column="1" 
           Grid.Row="1" 
           ItemsSource="{Binding ChromaCommandsCvs.View}" 
           SelectedItem="{Binding SelectedChromaCommand, UpdateSourceTrigger=PropertyChanged}" /> 
        <Label Grid.Column="2" 
          Grid.Row="1" 
          Content="Parameter:" 
          HorizontalAlignment="Right" /> 
        <TextBox Grid.Column="3" 
          Grid.Row="1" 
          Text="{Binding Parameter, UpdateSourceTrigger=PropertyChanged}" /> 
        <Button Grid.Column="4" 
          DataContext="ChromaGUI.MainWindow" 
          Grid.Row="1" 
          Content="Send" 
          HorizontalAlignment="Center" 
          FontSize="15" 
          Command="{Binding RelativeSource= 
           {RelativeSource Mode=FindAncestor, 
           AncestorType={x:Type Window}}, 
           Path=DataContext.SendMessageCommand}" 
          CommandParameter="{Binding FullCommandString}"/> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

正如你所看到的,我有綁定到一箇中繼命令按鈕元素。由於ItemsControl將數據上下文設置爲CommandLinesOc中的項目,因此必須使用主窗口相對源。

這一切工作正常 - 問題是CommandParameter似乎是繼承相同的相對源上下文,因爲我無法獲得FullCommandString(或可觀察集合中的項目之一的任何其他屬性,如Parameter或SelectedChromaCommand )解決任何事情。所以我的問題是,我可以(以及如何)將CommandParameter的數據上下文設置爲ItemsControl給我的內容,同時將Command的上下文保留爲父窗口?

+2

這一行的按鈕定義什麼是:'的DataContext =「ChromaGUI.MainWindow」'? – Leandro

+0

CommandParameter的datacontext是什麼('ChromaGUI.MainWindow')是 – Shoe

+0

這就是問題所在,它是從嘗試獲取中繼命令上下文 – odkken

回答

1

目前,你有按鈕DataContext設置爲一個字符串「ChromaGUI.MainWindow」:

<Button DataContext="ChromaGUI.MainWindow" 
     ....... 
     Command="{Binding RelativeSource= 
      {RelativeSource Mode=FindAncestor, 
      AncestorType={x:Type Window}}, 
      Path=DataContext.SendMessageCommand}" 
     CommandParameter="{Binding FullCommandString}"/> 

字符串沒有財產FullCommandString,所以你的命令參數綁定將失敗。只需刪除DataContext設置的按鈕,使其使用默認DataContext其對應項在ItemsSource

<Button 
     ....... 
     Command="{Binding RelativeSource= 
      {RelativeSource Mode=FindAncestor, 
      AncestorType={x:Type Window}}, 
      Path=DataContext.SendMessageCommand}" 
     CommandParameter="{Binding FullCommandString}"/> 
+0

AHH謝謝。從我試圖獲得繼電器命令上下文的工作時起,就剩餘了一些愚蠢的東西。 – odkken