2016-02-01 2 views
0

Как связать команду кнопки «myCmdButton» с ParameterVariableList, как и «addBtn». «addBtn» работает, как и ожидалось. Я хочу, чтобы другая команда кнопки также принадлежала классу ParameterVariableList.Как связать команду с ее «TemplatedParent»

Вот XAML:

<DataTemplate DataType="{x:Type locale:ParameterVariableList}" > 
    <StackPanel Orientation="Vertical"> 

     <TextBlock Text="{Binding Description}"/> 
     <Button Content="add" Command="{Binding AddEntryCmd}" Name="addBtn" /> 

     <ListBox ItemsSource="{Binding ItemList, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" > 
      <ListBox.ItemTemplate> 
       <ItemContainerTemplate> 
        <StackPanel Orientation="Horizontal"> 

         <TextBlock Text="{Binding}" /> 

         <Button Width="{Binding ActualHeight, RelativeSource={RelativeSource Self}}" Command="{Binding RemoveEntryCmd, ???}" Name="myCmdButton" > 
          <Image Source="Resources/trash_16x16.png" Stretch="None" VerticalAlignment="Center" HorizontalAlignment="Center" /> 
         </Button> 

        </StackPanel> 
       </ItemContainerTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </StackPanel> 
</DataTemplate> 

Я ожидал, что это работает, но это не делает:

Command="{Binding RemoveEntryCmd, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type locale:ParameterVariableList}}}" 

Ошибка: System.Windows.Data Ошибка: 4: Не удается найти источник для привязка со ссылкой 'RelativeSource FindAncestor, AncestorType =' hmi.ParameterVariableList ', AncestorLevel =' 1 ''. BindingExpression: Path = RemoveEntryCmd; DataItem = NULL; целевым элементом является «Button» (Name = ''); Целевое свойство является 'Command' (тип 'ICommand')

ответ

0

Это работает:

Command="{Binding DataContext.RemoveEntryCmd, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}" 

Почти ответ Abhinav, но DataContext не хватало.

0

Это должно работать

Command="{Binding RemoveEntryCmd,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ListBox}}} 
+0

№ System.Windows.Data Ошибка: 40: Ошибка пути BindingExpression: свойство 'RemoveEntryCmd' не найдено в 'object' '' ListBox '(Name =' ')'. BindingExpression: Path = RemoveEntryCmd; DataItem = 'ListBox' (Name = ''); целевым элементом является «Button» (Name = ''); target свойство - «Command» (тип «ICommand») .. try AncestorType x: Тип locale: ParamaterVariableList тоже .. dont work .. – mxii

+0

К сожалению. Тип предка должен быть родительским типом, используемым DataTemplate. Например, если родительский шаблон данных является datagrid, тогда Datagrid должен быть типом объекта. –

+0

Родитель этого DataTemplate является ListView, но тот же Errormessage: System.Windows.Data Ошибка: 40: Ошибка пути BindingExpression: свойство 'RemoveEntryCmd' не найдено в 'object' '' ListView '(Name =' listview_settings ')'. BindingExpression: Path = RemoveEntryCmd; DataItem = 'ListView' (Name = 'listview_settings'); целевым элементом является «Button» (Name = ''); target свойство - «Command» (тип «ICommand»). Это даже нелогично для меня, потому что его НЕ является свойством этого ListView? – mxii

Смежные вопросы