我只想将参数传递给控件。但它输出错误"输入字符串的格式不正确。"为什么?* *
的Xaml
<Views:SomeView SecurityId="abc"></Views:SomeView>
型号:
class Data
{
public string Case { get; set; }
public Data(int _input)
{
if (_input==1)
{
Case = "First";
}
else
{
Case = "Second";
}
}
}
ViewModel:
class DataViewModel
{
public string GetData
{
get
{
return D.Case;
}
set
{
D.Case = value;
}
}
public Data D;
public DataViewModel(string i)
{
D = new Data(Convert.ToInt16(i));
}
}
MainWindow
public partial class SomeView : UserControl
{
public string SecurityId
{
get
{
return (string)GetValue(SecurityIdProperty);
}
set { SetValue(SecurityIdProperty, value); }
}
public static readonly DependencyProperty
SecurityIdProperty =
DependencyProperty.Register("SecurityId",
typeof(string), typeof(SomeView),
new PropertyMetadata(""));
public SomeView()
{
DataContext = new DataViewModel(SecurityId);
InitializeComponent();
}
}
答案 0 :(得分:3)
你从未听过改变。
使用DataViewModel
在构造函数调用时具有的值构造SecurityId
。哪个是默认""
。然后通过XAML将值更改为"abc"
。但这种变化并没有在任何地方传播。它发生了,没有人关心。您DataViewModel
的构建工作已经完成。
你想听听变化吗?我不能说。您需要为依赖项属性注册更改处理程序。
在PropertyMetaData中,您可以将更改的事件处理程序作为第二个参数传递,例如静态方法:
public static readonly DependencyProperty
SecurityIdProperty =
DependencyProperty.Register("SecurityId",
typeof(string), typeof(SomeView),
new PropertyMetadata("", new PropertyChangedCallback(MyValueChanged)));
然后您可以使用方法来处理更改:
private static void MyValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
{
// react on changes here
}
顺便说一句,它不是附属物。它是一个正常的依赖属性。
答案 1 :(得分:0)
这是因为,您尝试将“abc”解析为整数,但您不处理由ConvertTo.Int16()方法引起的异常。
写DataViewModel构造函数,如
public DataViewModel(string i)
{
int value = 0;
int.TryParse(i, out value); // TryParse handles the exception itself.
D = new Data(value);
}