wpf与不同的源和目标绑定

时间:2013-04-22 16:11:43

标签: c# wpf binding .net-4.0

是否可以在WPF中进行绑定,而源和目标是不同的属性。

类似

  

Binding =“{Binding Source = MySourceProperty,Target = MyTargetProperty}”

根据要求解释我需要做什么: 该程序允许编辑属于数据库中主键的属性。如果属性刚刚更改,那么这将不会更新数据库值或创建重复项,具体取决于我处理保存对象的方式。一个不同的目标将允许它工作(通过使用'old'值明确指定要更新的内容)。

3 个答案:

答案 0 :(得分:0)

XAML中定义的Binding始终定位于其定义的对象和属性。

如果您定义Binding in code,则可以/必须明确指定源和目标。这基本上就是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标记扩展会自动设置方程的目标端,因此它始终是您定义绑定的对象。

答案 1 :(得分:0)

在公共财产的集合中,您可以访问旧值
关键是旧值
value是绑定的建议值
你可以拒绝来自绑定的值

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
   }
}

如果值无效,我会将上述内容与验证结合起来通知用户 Validation Class

答案 2 :(得分:0)

我会尝试回答您需要的内容,而不是问错误

  

“如果该属性刚刚改变,那么这将不会更新   DB值或创建重复的“

在您的媒体资源set中,如果输入的值已更改,则应检查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"));
           }
     }
}

作为旁注(或偏离主题),
您可能会觉得有用的是,上一个DataContext in WPF中的codeproject Download the source code文章反映了一个VisualModel属性的更新(与其他VM属性中的更新同步)

发布后立即:

enter image description here

第一个文本框中键入的文本反映在第二个文本框中,反之亦然,第二个文本框中键入的文本反映在第一个文本框中。

enter image description here

在3d文本框中键入的文本反映在第4个文本框中(在底部的文本块内容中),反之亦然,第4个文本框中键入的文本反映在3d(以及底部的文本块内容中)。 / p>

enter image description here

请注意下载名为DataCotext Inner Objects.zip,该名称已解压缩到名为Bindingtoclassesstate

的目录和解决方案中