Я создал связанные свойства зависимостей на статическом типе (DataField
). Среди них есть Owner
и Name
. Они могут быть прикреплены к любому экземпляру DependencyObject
.Правильный способ создания пути свойств для динамически созданного объекта привязки?
На некоторых элементах управления, такие как TextBox
я хочу дополнительное поведение для этих вложенных свойств, так что я перекрытая метаданные из другого статического типа:
static void OverrideDataFieldMetaData()
{
//...
DataField.NameProperty.OverrideMetadata(typeof(TextBox), new UIPropertyMetadata(new PropertyChangedCallback(OnFieldNameChanged)));
//...
}
В OnFieldNameChanged
методе, который я хочу, чтобы динамически создать Binding
объект и установить это на СЧПУ Text
собственности:
//...
private static void OnFieldNameChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
OnFieldNameChanged((TextBox)o, (string)e.OldValue, (string)e.NewValue);
}
private static void OnFieldNameChanged(TextBox tb, string oldValue, string newValue)
{
if (string.IsNullOrWhiteSpace(newValue))
BindingOperations.ClearBinding(tb, TextBox.TextProperty);
else
{
// PROBLEM HERE!
var binding = new Binding("(fc:DataField.Owner)." + newValue);
binding.Source = tb;
tb.SetBinding(TextBox.TextProperty, binding);
}
}
Это где я застрял. Как я должен создать этот объект Binding с правильной схемой маршрута?
Прямо сейчас, код выше бросает TypeNameParserException
. Я думаю, что я понимаю, почему это происходит, но даже если это не так, что если по какой-то причине я определил другой префикс для пространства имен в содержащем Window
/UserControl
?
Вам не нужно перезагружать привязку. В этом весь смысл привязки: p –
Так что 'DataField.Owner' в моем случае будет' DataField.OwnerProperty', так как 'PropertyPath' примет фактический экземпляр DependencyProperty, а не сам экземпляр владельца. Я прав? – Crono
@Crono: Да, я исправил опечатку. –