
[英]Binding a DataGridTextColumn or DataGridTemplateColumn to a foreign key
[英]DataGrid: replacing a DataGridTextColumn with DataGridTemplateColumn - how to make Binding work
我有一个带有几个 DataGridTextColumns 的 WPF Datagrid,我想用我自己的自定义控件替换一个。 但是我不知道如何绑定。
<DataGrid ItemsSource="{Binding Path=Entries, Mode=OneWay}" IsSynchronizedWithCurrentItem="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Comment" Binding="{Binding Path=Comment}" Width="Auto" />
</DataGrid.Columns>
</DataGrid>
我已将其替换为:
<DataGrid ItemsSource="{Binding Path=Entries, Mode=OneWay}" IsSynchronizedWithCurrentItem="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Comment" Width="Auto">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<StackPanel>
<x:customTextBox Text="{Binding Path=Comment}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Comment}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我也尝试设置一个 RelativeSource 但没有成功。 你对如何解决这个问题有什么建议吗?
这适用于我使用文本框而不是您的控件。
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Grid>
<DataGrid ItemsSource="{Binding Path=Entries, Mode=OneWay}" IsSynchronizedWithCurrentItem="True"
AutoGenerateColumns="False"
>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Comment" Width="Auto">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<StackPanel>
<TextBox Text="{Binding Path=Comment}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Comment}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
enter code here
MyItem 是我碰巧在临时应用程序中拥有的视图模型。
public partial class MainWindowViewModel : ObservableObject
{
[ObservableProperty]
private ObservableCollection<MyItem> entries = new ObservableCollection<MyItem>
(
new List<MyItem>
{
new MyItem{ IsChosen = false},
new MyItem{ IsChosen = true },
new MyItem{ IsChosen = true }
}
);
}
好像
public partial class MyItem : ObservableObject
{
[ObservableProperty]
private bool? isChosen;
[ObservableProperty]
private string comment = "Some test string";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.