绑定自定义DataGridHeader MVVM

时间:2019-04-17 12:28:57

标签: c# wpf mvvm datagrid datacontext

我试图将TextBlock绑定到Header的{​​{1}}中。但是,它似乎没有约束力。我尝试将 DataContext 设置为 root DataGrid之一,但不能解决问题。

这是个例子:

查看

Grid

查看模型

<Window 
       ... 
       Title={Binding Title}> 
    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>

   <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" />

    <DataGrid Grid.Row="1" x:Name="root">
        <DataGrid.Columns>
            <DataGridTextColumn>
                <DataGridTextColumn.Header>
                    <TextBlock Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" />
                </DataGridTextColumn.Header>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

结果 Showcase

我想要的是能够写在public class MainWindowViewModel : BindableBase { private string _title; public string Title { get { return _title; } set { SetProperty(ref _title, value); } } public MainWindowViewModel() { Title = "Initial header"; } } 中并更改标题。但是,它似乎没有约束力。

我相信问题与 DataContext 无关,但我无法修复。

谢谢

1 个答案:

答案 0 :(得分:0)

解决方案是将dataContext绑定到祖先。

<TextBlock DataContext="{Binding RelativeSource={RelativeSource AncestorType=DataGrid, Mode=FindAncestor}, Path=DataContext}" Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" />

我将其留在这里。