#wpf #data-binding
#wpf #привязка данных
Вопрос:
как задать контекст данных команды в itemcontrols в wpf
<controls:ImageButton x:Name="CardEditButton" DataContext="{Binding ElementName=AutofillTab, Path=DataContext}" ImagePath="MediaCoreWhiteEditButton.png" Height="24" Width="24" Command="{Binding EditCommand}" Margin="0 0 40 0" HorizontalAlignment="Right" VerticalAlignment="Center">
</controls:ImageButton>
эта команда не работает при добавлении в itemcontrolTemplate
<ItemsControl ItemsSource="{Binding Cards, UpdateSourceTrigger=PropertyChanged}" MinHeight="200" x:Name="CardsItemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Width="265" VerticalAlignment="Bottom" Height="40" HorizontalAlignment="Center" Cursor="Hand"
Background="{Binding Model.Color,Converter={StaticResource CardColorToBrushConverter}}" Margin="16 12 16 0"
Foreground="White"
Content="{Binding Name}"
x:Name="ItemButton" MouseLeave="ItemButton_MouseLeave" MouseEnter="ItemButton_MouseEnter">
<Button.Template>
<ControlTemplate TargetType="Button">
<Grid ClipToBounds="True" Name="TemplateGrid" >
<Rectangle Name="Rect" Width="{TemplateBinding Width}" Fill="{TemplateBinding Background}" RadiusX="8" RadiusY="8" Height="40" />
<StackPanel Orientation="Horizontal">
<controls:AutoGrid Columns="Auto,*" >
<TextBlock Text="{TemplateBinding Content}" FontSize="16" Grid.Column="1" FontWeight="Bold" TextTrimming="CharacterEllipsis"
VerticalAlignment="Center" Foreground="{TemplateBinding Foreground}" Margin="8 8 0 8"></TextBlock>
</controls:AutoGrid>
</StackPanel>
<controls:ImageButton x:Name="ExtendButton" Visibility="Hidden" ImagePath="MediaCoreInfoButton.png" ImageHeight="24" ImageWidth="24" Click="Item_OnClick" Margin="0 0 8 0" HorizontalAlignment="Right" VerticalAlignment="Center">
</controls:ImageButton>
<controls:ImageButton x:Name="CardEditButton" DataContext="{Binding ElementName=AutofillTab, Path=DataContext}"
ImagePath="MediaCoreWhiteEditButton.png" Height="24" Width="24"
Command="{Binding EditCommand}" Margin="0 0 40 0" HorizontalAlignment="Right" VerticalAlignment="Center">
</controls:ImageButton>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Комментарии:
1. Не могли бы вы, пожалуйста, уточнить, что именно вы хотите сделать. Объясните цель вашего кода, чтобы мы могли либо ответить на вопрос, либо предложить вам альтернативу, чтобы вы не зависали над проблемой.
Ответ №1:
Вместо того, чтобы пытаться привязать DataContext
к кнопке, используйте RelativeSource
привязку к Command
свойству и найдите предка, который имеет DataContext
то, что вам нужно. В этом случае я предполагаю, что это может быть ItemsControl
.
<controls:ImageButton x:Name="CardEditButton"
...
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}},
Path=DataContext.EditCommand}" />