绑定自定义DataGridHeader MVVM

问题描述 投票:1回答:1

我想在TextBlockHeader内绑一个DataGrid。但是,它似乎没有约束力。我已经尝试将DataContext设置为根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>

查看模型

public class MainWindowViewModel : BindableBase
{
    private string _title;
    public string Title
    {
        get { return _title; }
        set { SetProperty(ref _title, value); }
    }

    public MainWindowViewModel()
    {
        Title = "Initial header";
    }
}

结果Showcase

我想要的是能够写在TextBox并更改标题。但是,它确实似乎没有约束力。

我相信DataContext的问题,但我无法解决它。

谢谢

c# wpf mvvm datagrid datacontext
1个回答
0
投票

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

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

我会留在这里。

© www.soinside.com 2019 - 2024. All rights reserved.