我有一个具有文本框的用户控件。我试图通过在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。
我哪里出错?
答案 0 :(得分:1)
根据您的例外判断值[0] 和值[1] 不是字符串,因此当您尝试显式转换它们时,它会中断。
要避免这些类型的事情,您应该将TextBox绑定到公共属性,然后将按钮IsEnabled绑定到另一个公共属性,getter将通过检查它们绑定的属性来检查TextBox是否为空。