尝试转换绑定中的用户控件的属性时,无效的Cast Exception

时间:2009-08-25 15:47:12

标签: c# .net wpf user-controls dependency-properties

我有一个具有文本框的用户控件。我试图通过在UserControl中实现具有相同名称的DependencyProperty来公开texbox的Text属性。因此:

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部分似乎在我的应用程序中正常工作。但是,我尝试使用转换器将按钮的IsEnabled属性绑定到其中两个UserControl的Text属性,该转换器将检查UserControls的Text属性是否都是空字符串。加载应用程序窗口时出现以下错误:

System.InvalidCastException未处理   Message =“无法将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;
    }
抛出异常时,

values [0]和values [1]都具有值DependencyProperty.UnsetValue。

我哪里出错?

1 个答案:

答案 0 :(得分:1)

根据您的例外判断值[0] 值[1] 不是字符串,因此当您尝试显式转换它们时,它会中断。

要避免这些类型的事情,您应该将TextBox绑定到公共属性,然后将按钮IsEnabled绑定到另一个公共属性,getter将通过检查它们绑定的属性来检查TextBox是否为空。