可以在 WPF 中进行绑定,而源和目标是不同的属性。
类似的东西
绑定="{绑定源=MySourceProperty,目标=MyTargetProperty}"
根据要求解释我需要做什么: 除其他外,该程序允许编辑作为数据库中主键一部分的属性。如果属性刚刚被更改,那么这将不会更新 DB 值或创建副本,具体取决于我处理保存对象的方式。一个不同的目标将允许它工作(通过使用“旧”值明确指定要更新的内容)。
XAML 中定义的ABinding
始终以定义它的对象和属性为目标。
如果您Binding
在代码中定义,您可以/必须明确指定源和目标。本质上,这就是Binding
该类的工作方式:
Binding binding = new Binding("SourceProperty"); // Sets up the source property
myBinding.Source = mySourceObject; // sets up the source object
targetProperty.SetBinding(TargetType.TargetDepProperty, binding); // This sets the target object/binding
绑定的 XAML 标记扩展负责自动设置等式的目标端,因此它始终是您定义绑定的对象。
在您可以访问旧值的公共属性集中,
键是旧值
,值是来自绑定的建议值,
您可以拒绝来自绑定的值
private string key;
public string Key
{
get { return key; }
set
{
if (key == value) return;
// try data update
bool success = updateDB();
if (success) key = value; // only update if success
}
}
如果值无效,我会将上述内容与验证结合起来通知用户。
验证类
我会尽量回答你需要什么,而不是问不正确的 HOW
“如果属性刚刚被更改,那么这将不会更新数据库值或创建重复”
在您的属性set
ter 中,您应该检查set { if (this.someMember != value)
输入的值是否已更改:
public event PropertyChangedEventHandler PropertyChanged;
private string someMember;
public int SomeProperty
{
get
{ return this.someMember; }
set
{
if (this.someMember != value)
{
someMember = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("SomeProperty"));
}
}
}
作为旁注(或题外话),
您可能会发现WPF文章中的代码项目 DataContext 在其最后下载源代码中有一个示例,当反映一个 VisualModel 属性的更新时(与另一个 VM 属性中的更新同步)
启动后立即:
在第一个文本框中键入的文本反映在第二个文本框中,反之亦然,在第二个文本框中键入的文本反映在第一个文本框中。
在 3d 文本框中键入的文本反映在第 4 个文本框(以及底部的文本块内容中),反之亦然,在第 4 个文本框中键入的文本反映在 3d 中(以及底部的文本块内容中)。
请注意,下载是DataCotext Inner Objects.zip
解压缩到目录和解决方案的名称Bindingtoclassesstate