问题标签 [updatesourcetrigger]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5502 浏览

wpf - WPF 中 UpdateSourceTrigger=PropertyChanged 和 StringFormat 的问题

我的应用程序中有一个文本框,该文本框将数据绑定到班级中的十进制字段,并且绑定模式是两种方式。我使用 StringFormat={0:c} 进行货币格式化。

只要我不触摸“UpdateSourceTrigger”,它就可以正常工作。如果我设置 UpdateSourceTrigger=PropertyChanged ,它将停止格式化我输入的文本。

这是我的代码示例

员工.cs

员工列表.cs:

Window1.xaml:

如果您从上面的代码中删除“UpdateSourceTrigger=PropertyChanged”,它就可以正常工作。

我也尝试过使用 Converter 而不是 StringFormat,但问题仍然没有解决。

0 投票
3 回答
1632 浏览

c# - 有没有办法全局更改 wpf 中绑定的默认行为?

有没有办法改变绑定的默认行为,所以我不需要在每个文本框上设置“UpdateSourceTrigger=PropertyChanged”?

这可以通过 ControlTemplate 或 Style 完成吗?

0 投票
1 回答
11760 浏览

textbox - 当文本输入的强制导致源值未更改时,不更新 TextBox 上的文本,其中 UpdateSourceTrigger=PropertyChanged

我有一个文本框,其Text属性有一个TwoWay MultiBinding,其中UpdateSourceTrigger设置为PropertyChanged。第一个Binding是一个依赖属性 ( Value ),它有一个PropertyChangedCallBack函数,该函数将值四舍五入到小数点后一位。

文本框的目的是在用户键入时执行舍入,而不是在文本框失去焦点时执行舍入,因此UpdateSourceTrigger设置为PropertyChanged

我遇到的问题是,如果输入的文本不会导致更改,则文本属性和会不同步。只有当舍入操作导致Value发生变化时, Text才会即时更新。例如,如果TextValue都是 123.4 并且用户在此之后键入 1,则Value将四舍五入为相同的值 (123.4),但Text显示 123.41。但是,如果在 4 之后键入 9,则Value向上舍入为 123.5。并且由于这种实际变化,文本随后更新为相同的 (123.5)。

即使自上次触发以来源没有更改,是否有任何方法可以强制文本框从其源更新?我尝试过使用BindingExpressionBase.UpdateTarget(),但这仅在UpdateSourceTrigger设置为Explicit时有效,因为在可以调用UpdateTarget的合适时间(例如TextInput处理程序)之前不再更新Value,因此无法使用。我尝试了其他方法,例如从绑定的Value中显式更新Text值,暂时强制对Value进行实际更改以调用更新,但是这些“黑客”要么不起作用,要么导致其他问题。

任何帮助将不胜感激。

代码如下。

XAML 片段

C# 片段

需要转换器类

0 投票
1 回答
5315 浏览

wpf - WPF DatePicker UpdateSourceTrigger PropertyChanged 不起作用

我正在使用 MVVM 并希望在 datepicker 控件的文本更改上启用一个按钮..

XAML 代码:在 DatePicker 上绑定

绑定按钮:

查看模型代码:我正在使用 DelegateCommand 进行按钮单击

查看模型委托初始化

AllowSubmit 实现

InactiveDate 属性实现

SubmitCommand.RaiseCanExecuteChanged()一旦我在 DateTimePicker 上输入任何字符,应该启用该按钮,但它没有发生。

0 投票
1 回答
6785 浏览

wpf - 如何在可编辑的 Wpf Combobox 上使用更新源触发器?

我有一个组合框(在我的 wpf-mvvm 应用程序中)。我已经设置了IsEditable = true。但是当我开始输入时,“属性更改事件”会被触发。

我怎么能UpdateSourceTrigger = Propertychanged在这里设置?

另外..如果用户输入了新值(我的意思是列表中可用的值除外..使用编辑功能),我需要调用验证函数。

任何帮助将不胜感激。

0 投票
1 回答
1059 浏览

silverlight - Silverlight 中 Datacontext 的 UpdateSourceTrigger

您好我正在开发一个 MVVM Silverlight 应用程序,我使用 TextBox 的 UpdateSourceTrigger 属性在运行时更新绑定表达式,如下所示:

.xaml.cs:

BindingExpression beID = txtEmpID.GetBindingExpression(TextBox.TextProperty); beID.UpdateSource();

BindingExpression beAge = txtAge.GetBindingExpression(TextBox.TextProperty); beAge.UpdateSource();

.xaml:

在这种情况下,我为每个文本框手动执行绑定表达式。有没有一种方法可以在单个实例中为网格内的所有文本框控件执行此绑定表达式。

0 投票
1 回答
164 浏览

wpf - 如何在数据加载时防止计算绑定文本框上的 UpdateSource?

当用户在 3 个文本框中输入数字时,我会在第 4 个文本框中计算平均值。从前 3 个文本框的 TextChanged 事件调用 CalculateAverage 方法。所有文本框都已绑定。(注意:我知道计算值不应该存储在数据库中,但我无法更改它。)我正在使用 WPF 4 和 Entity Framework 4。

我的问题是平均文本框总是有 EntityState.Modified。这是因为加载数据或导航记录会导致 TextChanged 事件调用 CalculateAverage。即使用户没有进行更改并且 CurrentValue(平均)与 OriginalValue 匹配,绑定机制现在仍认为此记录是“脏的”。

我想知道是否有比我实施的更清洁的解决方案。我的解决方法是在数据加载和记录导航期间设置一个标志。这意味着我必须添加一个 OnRecordChanging 事件来设置 _sharingRecords 标志和一个 OnRecordChanged 事件来取消设置它。在CalculateAverage 开始时,我有:if (_loadingData || _changingRecords) return;退出CalculateAverage 并防止更新平均字段。

有没有更清洁的方法来避免这个问题?

0 投票
1 回答
1521 浏览

c# - Silverlight DataGrid 的 DataTemplate 和显式 UpdateSourceTrigger

我希望 DataGrid 的 DataTemplate 中的文本框在用户单击“确定”按钮时显式更新。我有以下 XAML 代码:

我将 UpdateSourceTrigger 设置为显式。如何访问 TextBox 项目以对其调用 UpdateSource()?

0 投票
1 回答
2548 浏览

silverlight - Silverlight 中的 UpdateSourceTrigger PropertyChanged?

我相信你们中的大多数人都遇到过这种情况,当您输入一个您喜欢的文本框以根据已输入的内容过滤 ViewCollection 时。

它在 WPF 中非常简单,只需将文本绑定的 UpdateSourceTrigger 更改为 PropertyChanged。

正如您所期望的,Silverlight 没有它。相反,只有一个默认值和显式值。

我有想法将交互行为绑定到文本框的 TextChanged 事件。您会推荐这种方法还是有更好的方法?

0 投票
2 回答
2174 浏览

wpf - TextBox UpdateSourceTrigger = PropertyChanged - 它真的会影响性能吗?

MSDN 文档指出:

TwoWay 或 OneWayToSource 的绑定侦听目标属性中的更改并将它们传播回源。这称为更新源。通常,只要目标属性更改,就会发生这些更新。这适用于复选框和其他简单控件,但通常不适用于文本字段。每次击键后更新可能会降低性能,并且它会剥夺用户在提交新值之前退格和修复打字错误的通常机会。因此,Text 属性的默认 UpdateSourceTrigger 值是 LostFocus 而不是 PropertyChanged。

我了解,在更新直接进入数据库或通过网络,或者数据量非常大的情况下,在 TextBoxes 上使用 UpdateSourceTrigger = PropertyChanged 确实会降低性能。

但是,如果它只是更新一个简单的 DependencyProperty,或者一个实体框架对象的属性(在提交之前),那么性能损失是否可以忽略不计?

只是想知道,因为我正在创建一个 WPF 应用程序,它跟踪正在编辑的对象的状态,并根据是否进行了更改来优化“保存”按钮的外观。我认为确定更改的最简单方法是酌情捕获相关的 SourceUpdated 事件。当文本框的 UpdateSourceTrigger = PropertyChanged 时,它的工作效果最佳,因为用户会立即获得“可保存”更改的反馈。