加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在TextBox上使用StringFormat绑定到double

发布时间:2020-12-15 08:29:47 所属栏目:百科 来源:网络整理
导读:我正在使用 WPF的TextBox,将Text属性上的绑定设置为ViewModel上的double. 我的XAML看起来像这样: TextBox Text="{Binding Path=MyDoubleValue,StringFormat=N2,UpdateSourceTrigger=PropertyChanged}" / 不幸的是,当我将UpdateSourceTrigger切换到PropertyC
我正在使用 WPF的TextBox,将Text属性上的绑定设置为ViewModel上的double.

我的XAML看起来像这样:

<TextBox Text="{Binding Path=MyDoubleValue,StringFormat=N2,UpdateSourceTrigger=PropertyChanged}" />

不幸的是,当我将UpdateSourceTrigger切换到PropertyChanged并输入值12345时,我得到12,354.00(编辑:注意4之前的5).这是在.NET格式化程序添加2到3之后将光标保持在同一位置的结果.

如何将StringFormat与UpdateSourceTrigger一起设置为PropertyChanged?

注意:这只发生在.NET 4中.

解决方法

通常,您不希望UpdateSourceTrigger在TextBox.Text绑定上成为PropertyChanged,因为每次按下键时都会触发Validation和Change通知.

如果你这样做只是为了如果用户点击Enter它将在处理save命令之前保存该值,然后我建议挂钩到PreviewKeyDown事件并手动更新源,如果按下的键是Enter(通常我做这个附属物)

private void TextBox_PreviewKeyDown(object sender,KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        var obj = sender as UIElement;
        BindingExpression textBinding = BindingOperations.GetBindingExpression(
            obj,TextBox.TextProperty);

        if (textBinding != null)
            textBinding.UpdateSource();
    }
}

但话虽如此,如果您仍想使用UpdateSourceTrigger = PropertyChanged,则在显示值时考虑使用格式,但在用户编辑时将其删除.

<TextBox>
    <TextBox.Style>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Text" Value="{Binding Path=MyDoubleValue,StringFormat=N2}" />
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="Text" Value="{Binding Path=MyDoubleValue,UpdateSourceTrigger=PropertyChanged}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读