【问题标题】:Binding DataTemplate controls in DataGridTemplateColumn在 DataGridTemplateColumn 中绑定 DataTemplate 控件
【发布时间】:2026-02-03 06:05:01
【问题描述】:

我有界 DataGrid,其中项目是 ObservableCollection 对 {Prop1, Prop2}

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
                   <DataGrid.Columns>
                        <DataGridTemplateColumn>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBox >
                                        <TextBox.Text>
                                            <Binding Path="Prop1">
                                            </Binding>
                                        </TextBox.Text>   
                                    </TextBox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>

如何将 TextBox Text 属性绑定到 Prop1?我尝试如上所示,但它不起作用(看起来 TextBox 的数据上下文设置为主窗口)。

【问题讨论】:

  • ObservableCollection 的类型参数是什么,即 {Prop1, Prop2} 到底是什么?
  • @mm8,具有两个字符串属性的自定义类。
  • 如果您需要任何帮助,请发布类的定义和 Items 属性。
  • @mm8, public class Pair { public Pair() {} public string Prop1 { get;放; } 公共字符串 Prop2 { 获取;放; } }
  • 还有定义 Items 属性的视图模型?顺便说一句,您应该编辑您的问题。

标签: wpf binding


【解决方案1】:

我已经设法重现了有问题的问题(我假设“它不起作用”意味着在 TextBox 中输入的值没有推送到您的视图模型)。我不确定确切的原因,但似乎在这种特定情况下,如果您没有明确设置Binding.UpdateSourceTrigger,它默认(或至少像它一样)为UpdateSourceTrigger.Explicit。所以解决这个问题的方法是显式地将绑定上的UpdateSourceTrigger设置为UpdateSourceTrigger.LostFocus或者UpdateSourceTrigger.PropertyChanged

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Prop1, UpdateSourceTrigger=LostFocus}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

【讨论】:

  • Grx70,感谢您的帮助。我在 Prop1 上使用了错误的数据类型(int 而不是 string),这就是绑定无法正常工作并显示错误值的原因。