В WPF три объекта выставляются одинаково DependencyProperty
(допустим, это целое число). Я хочу, чтобы все три значения свойств оставались синхронизированными, то есть всякий раз, когда значение int изменяется в объекте, это значение распространяется на два других объекта. Я думаю о multibinding
, чтобы выполнить работу, но я не знаю, как определить, какой объект изменился, поэтому какое значение следует использовать и распространить на другие объекты.
Отредактировано : вот мой предварительный код для мультисвязывания с ложной надеждой, что он будет работать без дополнительного кода:
// create the multibinding
MultiBinding mb = new MultiBinding() {
Mode = BindingMode.TwoWay,
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
};
// create individual bindings to associate object_2 and object_3 to object_1
Binding b2 = new Binding() {
Source = object_2,
Path = new PropertyPath("X")
};
Binding b3 = new Binding() {
Source = object_3,
Path = new PropertyPath("X")
};
// add individual bindings to multibinding
mb.Bindings.Add(b2);
mb.Bindings.Add(b3);
// bind object_2 and _3 to object_1
BindingOperations.SetBinding(object_1, TypeObject_1.XProperty, mb);
Но на самом деле, есть ошибка времени выполнения, говорящая о том, что в привязке, установленной последней инструкцией, отсутствует конвертер. Но, опять же, я не знаю, как написать этот конвертер (конвертировать нечего (как это имеет место в соответствующем примере кода MS, связывающего 3 свойства rgb со свойством цвета), только для передачи значения измененного свойства к двум другим свойствам).
Я понимаю, что мог бы решить проблему, создав событие X_Changed в 3 типах, а затем зарегистрировать каждый объект в событии двух других объектов. Мне не нравится этот «ручной» способ, и я бы предпочел связать 3 свойства вместе.