代码之家  ›  专栏  ›  技术社区  ›  Dabblernl

尝试转换绑定中用户控件的属性时出现无效的强制转换异常

  •  1
  • Dabblernl  · 技术社区  · 16 年前

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

    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属性绑定到其中两个用户控件的文本属性,该转换器将检查两个用户控件的文本属性是否都是空字符串。加载应用程序窗口时,我得到以下错误:

    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;
        }
    

    当引发异常时,值[0]和值[1]都具有值DependencyProperty.UnsetValue。

    我哪里做错了?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Stan R.    16 年前

    从你的例外判断 值〔0〕 值〔1〕 不是字符串,因此当您试图显式地强制转换它们时,它将中断。

    为了避免出现这些类型的情况,您应该将文本框真正绑定到公共属性,然后将按钮IsEnabled绑定到另一个公共属性,getter将通过检查它们绑定到的属性来检查文本框是否为空。