我不知道我如何实现一种特殊行为。我有一个包含两列的数据网格的视图。一列显示格式化价格(“00.00”)。当绑定更新(属性设置)时,价格将自动保存。如果我使用 UpdateSourceTrigger=PropertyChanged,价格总是正确的。此触发器的缺点是,如果用户选择文本框中的所有文本并仅键入“1”,则价格将格式化为“01.00”。我不希望价格自动形成。只有当焦点移到其他对象时,才会出现该格式。
理论上我需要设置两个不同的UpdateSourceTrigger。一种用于更新后端(用户在文本框中输入内容)。还有一个用于更新目标(焦点移动到另一个对象)。另外,如果新值无效,我需要立即显示。
<DataGrid>
<DataGrid.Columns>
<!-- one other column -->
<DataGridTemplateColumn Header="Price"/>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!-- this textbox should update the source if user types something -->
<!-- the textbox itself should be updated after lost focus -->
<TextBox Text="{Binding Price, UpdateSourceTriger=PropertyChanged}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn/>
</DataGrid.Column>
</DataGrid>
编辑:我会给你一个小例子:如果我将绑定的 Price 属性设置为“1”,它将自动格式化为“01.00”。如果 UpdateSourceTrigger=PropertyChanged,TextBox 将显示“01.00”。只要 TextBox 聚焦,我希望 TextBox 显示“1”。当然,我会通过 UpdateSourceTrigger=LostFocus 获得这种行为。这里的问题是,DataGrid 包含在 TabControll 中,并且两个控件不能很好地协同工作。如果您在焦点仍在 TextBox 上时选择其他选项卡,则 TextBox 不会抛出 LostFocus。
希望你们中的一些人对我有建议:-)
安德烈