sai*_*165 2 c# wpf xaml datagrid mvvm
我正在尝试将视图模型中的字符串绑定到DataGrid的标头。以下是我的.xaml代码:
<DataGrid Grid.Row="0" Grid.Column="1" Style="{StaticResource CustomDataGridStyle}" ItemsSource="{Binding InputDataCollection}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="{Binding InputNameHeader}" Binding="{Binding Name}" Width="50*"
ElementStyle="{StaticResource CellTextStyleR}" HeaderStyle="{StaticResource HeaderRight}"/>
<DataGridTextColumn Header="{Binding InputStateHeader}" Binding="{Binding State}" Width="50*"
ElementStyle="{StaticResource CellTextStyleL}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是列标题始终为空。我认为这是因为我定义了ItemSource,并且将标头绑定到的东西不是那个ItemSource的一部分。
在这种情况下,没有人对我如何使用ViewModel中的字符串定义Headers有任何建议吗?
弄清楚了。
我必须将Header绑定移动到DataGridTextColumn.HeaderTemplate并使用RelativeSource。现在它可以正常工作了。
<DataGrid Grid.Row="0" Grid.Column="1" Style="{StaticResource CustomDataGridStyle}" ItemsSource="{Binding InputDataCollection}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Width="50*" ElementStyle="{StaticResource CellTextStyleR}" HeaderStyle="{StaticResource HeaderRight}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.InputNameHeader, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<DataGridTextColumn Header="Input State" Binding="{Binding State}" Width="50*" ElementStyle="{StaticResource CellTextStyleL}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.InputStateHeader, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |