Ограничение для ограничения области действия присоединенного свойства зависимости - PullRequest
12 голосов
/ 19 июля 2010

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

Если нет, имеет ли смысл явно указывать статические методы Get-и Set-подключенных DP?

Пример:

Если у меня есть, например, следующее объявление:

public static int GetAttachedInt(DependencyObject obj) {
    return (int)obj.GetValue(AttachedIntProperty);
}

public static void SetAttachedInt(DependencyObject obj, int value) {
    obj.SetValue(AttachedIntProperty, value);
}

public static readonly DependencyProperty AttachedIntProperty = 
   DependencyProperty.RegisterAttached("AttachedInt", typeof(int), 
   typeof(Ownerclass), new UIPropertyMetadata(0));

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

public static int GetAttachedInt(TextBox textBox) {
    return (int)textBox.GetValue(AttachedIntProperty);
}

public static void SetAttachedInt(TextBox textBox, int value) {
    textBox.SetValue(AttachedIntProperty, value);
}

public static readonly DependencyProperty AttachedIntProperty = 
   DependencyProperty.RegisterAttached("AttachedInt", typeof(int), 
   typeof(Ownerclass), new UIPropertyMetadata(0));

У меня такой вопрос, потому что это приводит к несогласованности, потому что GetValue и SetValue могут больше использоваться для любого типа, а также в разметке нет возможности ограничить вложение.

Раньше я делал то, что я добавил исключение в обработчик PropertyChanged и вызвал там исключение, что разрешены только типы xy.

Что вы думаете?

1 Ответ

17 голосов
/ 19 июля 2010

Я считаю, что все, что вам нужно сделать для ограничения целевого типа вложенных свойств, это изменить определения методов GetPropertyName и SetPropertyName.

Пример:

public static int GetAttachedInt(MyTargetType obj)
{
    return (int)obj.GetValue(AttachedIntProperty);
}

public static void SetAttachedInt(MyTargetType obj, int value)
{
    obj.SetValue(AttachedIntProperty, value);
}

, где MyTargetType может быть любым типом, унаследованным от DependencyObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...