【问题标题】:Timepicker Updatesourcetrigger=propertychanged doesn't change valueTimepicker Updatesourcetrigger=propertychanged 不改变值
【发布时间】:2013-02-15 13:10:46
【问题描述】:

我在 Windows 窗体中托管 WPF 用户控件 在 wpf 用户控件中,我使用 wpfToolkit.extended 中的时间选择器

如果我使用向上键或向下键,或者只是在文本字段中输入时间,则源不会更新,尽管我使用的是 Updatesourcetrigger = propertychanged。

当我在下拉列表中选择一个时间时,一切正常。 这是工具包的命名空间。

xmlns:xctk="clr-namespace:Xceed.Wpf.Toolkit;assembly=WPFToolkit.Extended"

这是时间选择器的 xaml

  <xctk:TimePicker  Format="LongTime" TimeInterval="00:15:00.000" Value="{Binding Path=StartTime, UpdateSourceTrigger=PropertyChanged}" ></xctk:TimePicker>

如果我在 WPFusercontrol 外部单击而不首先将焦点更改到 wpf 用户控件中的另一个控件。绑定时间没有更新。

知道如何解决这个问题吗?

【问题讨论】:

    标签: wpf data-binding wpftoolkit


    【解决方案1】:

    找到了解决这个问题的方法: 我给 TimePicker 起了一个名字(在本例中为“tpFrom”),然后我在 TimePicker 上使用了 TextBoxBase.TextChanged 事件。 这就是 Xaml 现在的样子:

    <xctk:TimePicker Name="tpFrom"  Format="LongTime"  TextBoxBase.TextChanged="TimePicker_TextChanged"  TimeInterval="00:15:00.000" Value="{Binding Path=StartTime, UpdateSourceTrigger=PropertyChanged}"></xctk:TimePicker>
    

    在我们的事件处理程序后面的代码中,我们将重点放在我们的时间选择器上。

      private void TimePicker_TextChanged(object sender, TextChangedEventArgs e)
        {
            tpFrom.Focus();            
        }
    

    现在每次文本改变,值也会改变,问题就解决了:-)

    【讨论】:

    • 在我的 TextChanged 案例中,它必须将注意力转移到 DateTimePicker 上才能触发事件链:SubView.Focus(); SubView.dtpSince.Focus();
    【解决方案2】:

    TimePicker 是否有 Text 属性?如果是这样,请尝试绑定到那个。

    我认为这种行为可能是为了防止您在键入时绑定到错误的日期时间。我猜想当焦点丢失时,它会尝试设置属性并进行错误检查。如果它在您键入时执行此操作,则它会在您进行更改(例如删除字符)时不断更改值。

    您在键入时有什么具体的尝试吗?

    【讨论】:

    • 它没有文本属性
    • 问题不是真正的打字(在这个时间选择器中不顺利),而是使用箭头来增加和减少小时等......如果我在 wpf 用户之外按下保存按钮控制更改不在值中。
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多