从 DataGridTextColumn.Header 绑定到 Parent.Parent

本文关键字:Parent 绑定 Header DataGridTextColumn | 更新日期: 2023-09-27 17:56:52

嗨,通常它应该自动工作,但它不会

XAML:

 <DataGrid AutoGenerateColumns="False" Width="350" IsReadOnly="True" 
                              ItemsSource="{Binding StichwortList}" >
           <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding DisplayName}" Width="350">
                      <DataGridTextColumn.Header>
                            <DockPanel Margin="0" Width="340" HorizontalAlignment="Stretch" LastChildFill="True">
                                  <TextBlock DockPanel.Dock="Left" Margin="0" Text="Name"/>
                                  <Button DockPanel.Dock="Right" Content="-" Margin="0" Width="23" Command="{Binding RemoveStichwortCommand}"/>
                                  <Button DockPanel.Dock="Right" Content="+" Margin="0" Width="23" Command="{Binding AddStichwortCommand}"/>
                                  <Label />
                            </DockPanel>
                      </DataGridTextColumn.Header>
                 </DataGridTextColumn>
           </DataGrid.Columns>
  </DataGrid>

相关代码:

        private RelayCommand _addStichwortCommand;
        public ICommand AddStichwortCommand
        {
            get { return _addStichwortCommand ?? (_addStichwortCommand = new RelayCommand(param => this.OnAddStichwort())); }
        }
        private void OnAddStichwort()
        {
            // some code
        }
        private RelayCommand _removeStichwortCommand;
        public ICommand RemoveStichwortCommand
        {
            get { return _removeStichwortCommand ?? (_removeStichwortCommand = new RelayCommand(param => this.OnRemoveStichwort())); }
        }
private void OnRemoveStichwort()
        {
           // some code
        }

我对此视图的其他绑定有效,我的命令绑定也可以正常工作

那么任何人都可以告诉我我的绑定有什么问题吗?

编辑

哦,我忘了

这一切都在一个Usercontrol中,其Datacontext包含所有属性以及绑定和命令

灵魂:

DockPanel需要将他的Datacontext绑定到Usercontrol DatacontextUsercontrol需要一个名字

x:Name="uc"

<DockPanel Margin="0" Width="340" HorizontalAlignment="Stretch" LastChildFill="True" DataContext="{Binding ElementName=uc, Path=DataContext}">
     <TextBlock DockPanel.Dock="Left" Margin="0" Text="Name"/>
     <Button DockPanel.Dock="Right" Content="-" Margin="0" Width="23" Command="{Binding RemoveStichwortCommand}"/>
      <Button DockPanel.Dock="Right" Content="+" Margin="0" Width="23" Command="{Binding AddStichwortCommand}"/>
      <Label />
</DockPanel>

如果上面的解决方案不起作用,您应该看看这个答案

从 DataGridTextColumn.Header 绑定到 Parent.Parent

你必须

XAML 中命名UserControl并在绑定中使用它。类似于以下代码:

<UserControl x:Name="uc" >
.
.
.
<Button DockPanel.Dock="Right" Content="-" Margin="0" Width="23" Command="{Binding RemoveStichwortCommand, ElementName=uc}"/>
<Button DockPanel.Dock="Right" Content="+" Margin="0" Width="23" Command="{Binding AddStichwortCommand, ElementName=uc}"/>

希望这有帮助。