1

我不知道我如何实现一种特殊行为。我有一个包含两列的数据网格的视图。一列显示格式化价格(“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。

希望你们中的一些人对我有建议:-)

安德烈

4

1 回答 1

0

当用户从 TextBox 中移除焦点时,您始终可以使用它UpdateSourceTrigger=LostFocus来触发数字格式。对于验证,我建议使用内置于用户控件中的Validation in Windows Presentation Format 。

编辑:将OnSelect事件添加TabItem设置焦点(从 TextBlock 中移除焦点),但必须在 TabItem 上启用 IsEnabled 和 IsFocusable。

于 2012-10-04T12:28:00.663 回答