Invalid Cast Exception при попытке преобразовать свойство пользовательского элемента управления в привязку - PullRequest
1 голос
/ 25 августа 2009

У меня есть пользовательский элемент управления с текстовым полем. Я попытался открыть свойство Text для texbox, реализовав свойство DependencyProperty с тем же именем в UserControl. Таким образом:

public static readonly DependencyProperty TextProperty =
   DependencyProperty.Register("Text",
                                typeof(string),
                                typeof(UserControlWithTextBox),
                                new UIPropertyMetadata(string.Empty));
    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set 
        {
            SetValue(TextProperty, value);
            textBox.Text = value;
        }
    }

Кажется, что в моем приложении get part работает нормально. Однако я попытался связать свойство IsEnabled кнопки со свойством Text двух из этих пользовательских элементов управления, используя конвертер, который проверяет, являются ли оба свойства текста пользовательского элемента пустыми строками. При загрузке окна приложения появляется следующая ошибка:

System.InvalidCastException не обработано Сообщение = "Невозможно преобразовать объект типа MS.Internal.NamedObject в тип System.String."

Метод Convert выглядит так:

  public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return (string) values[0] != string.Empty &&
               (string) values[1] != string.Empty;
    }

значения [0] и значения [1] оба имеют значение DependencyProperty.UnsetValue при возникновении исключения.

Где я ошибся?

1 Ответ

1 голос
/ 25 августа 2009

Судя по вашему исключению значения [0] и значения [1] не являются строковыми, поэтому при попытке явного их приведения они прерываются.

Чтобы избежать подобных вещей, вы должны действительно связать свои TextBox с общедоступными свойствами, а затем связать свои кнопки IsEnabled с другим публичным свойством, которое в получателе будет проверять, являются ли TextBoxes пустыми, проверяя свойства, с которыми они связаны.

...