2013-04-22 5 views
1

Есть возможность сделать привязку в WPF, тогда как источник и цель - разные свойства.Связывание wpf с разными источниками и целевыми

А-ля-то вроде

Binding = "{Binding Source = MySourceProperty, Target = MyTargetProperty}"

В соответствии с просьбой объяснить, что мне нужно сделать: Программа среди прочего, позволяет редактировать свойства, которые являются частью первичного ключа в базе данных. Если свойство просто изменилось, то это либо не обновит значение БД, либо создаст дубликат, в зависимости от того, как я обрабатываю сохранение объекта. Другая цель позволит это работать (явно указывая, что нужно обновлять, используя «старое» значение).

+0

** что ?? ** (этот текст существует только для удовлетворения комментарий минимальной длины) –

+0

может вы быть более подробным в своем вопросе? –

+0

Что вы пытаетесь достичь? – devdigital

ответ

0

A Binding, определенный в XAML, всегда нацелен на объект и свойство, на котором оно определено.

Если вы определяете Bindingin 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 для привязки заботится о создании целевой части уравнения автоматически, так что это всегда объект, на котором определяют связывание.

0

В наборе публичной собственности у вас есть доступ к старому значению
ключа старого значение
значения предлагаемого значения от связывания
вы можете отвергнуть значение, которое происходит от связывания

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

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")); 
      } 
    } 
} 

В сторону нотная (или не по теме),
вы можете найти полезную статью CodeProject DataContext in WPF в своей последней Download the source code имеет образец, когда обновление одного свойства VisualModel отражается (синхронизированный с обновлениями в другой свойство виртуальной машины)

Сразу после запуска:

enter image description here

текст набирается в текстовом поле 1 находит свое отражение во 2-й textb ox и наоборот, текст, введенный во втором текстовом поле, отражается в 1-м.

enter image description here

Текст набирается в 3d текстовое поле находит свое отражение в 4-м текстовом поле (и по содержанию TextBlock в нижней части) и, наоборот, текст набирается в 4-ом текстовом поле отражается в 3d (и в TextBlock содержание внизу).

enter image description here

Обратите внимание, что загрузка DataCotext Inner Objects.zip который распаковывается в папку и решения с именем Bindingtoclassesstate

Смежные вопросы