Привязать пользовательский DataGridHeader MVVM

#c# #wpf #mvvm #datagrid #datacontext

#c# #wpf #mvvm #datagrid #datacontext

Вопрос:

Я пытаюсь привязать a TextBlock внутри Header a 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";
    }
}
 

Результат
Демонстрация

что я хочу, так это иметь возможность писать в заголовке TextBox и изменять его. Однако, похоже, он не привязан.

Я считаю, что проблема связана с DataContext, но я не смог ее исправить.

Спасибо

Ответ №1:

Решение состояло в том, чтобы привязать DataContext к предку.

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

Я оставлю это здесь.