#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}" />
Я оставлю это здесь.