Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有非依赖属性的wpf mvvm?_Wpf_Mvvm - Fatal编程技术网

具有非依赖属性的wpf mvvm?

具有非依赖属性的wpf mvvm?,wpf,mvvm,Wpf,Mvvm,我有一个小问题(我希望如此)。我有一个wpf项目,我使用MVVM,但我需要设置textbox的“SelectedText”属性。“selectedText”不是依赖项属性,因此,我无法使用绑定。。。 如何解决此问题?如果您只需要从VM向控件分配值,则可以像这样使用AttachedProperty 公共类附件属性 { 私有静态从属属性SelectedTextProperty= DependencyProperty.RegisterAttached(“SelectedText”,类型为(字符串),

我有一个小问题(我希望如此)。我有一个wpf项目,我使用MVVM,但我需要设置textbox的“SelectedText”属性。“selectedText”不是依赖项属性,因此,我无法使用绑定。。。
如何解决此问题?

如果您只需要从VM向控件分配值,则可以像这样使用
AttachedProperty

公共类附件属性
{
私有静态从属属性SelectedTextProperty=
DependencyProperty.RegisterAttached(“SelectedText”,类型为(字符串),
typeof(AttachedProperties),新属性元数据(默认值(字符串),OnSelectedTextChanged));
SelectedTextChanged上的私有静态无效(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
var txtBox=d作为文本框;
如果(txtBox==null)
返回;
txtBox.SelectedText=e.NewValue.ToString();
}
公共静态字符串GetSelectedText(DependencyObject dp)
{
如果(dp==null)抛出新的ArgumentNullException(“dp”);
返回(字符串)dp.GetValue(SelectedTextProperty);
}
公共静态无效集合SelectedText(DependencyObject dp,对象值)
{
如果(dp==null)抛出新的ArgumentNullException(“dp”);
dp.SetValue(SelectedTextProperty,value);
}
}
以及用法



您需要仅通过虚拟机设置
SelectedText
,还是绑定必须双向工作?好的,我将向您发布一个解决方案。出于好奇,您可以在虚拟机中创建一个可以绑定的行为:为什么要添加一个引发异常的失败检查来防止c#引发异常?对我来说,唯一的原因似乎是使用ArgumentNullException而不是NullReferenceException来编写更多的代码,但是使用适当的IDE,甚至仅仅是调用堆栈,它应该是非常明显的。因为该方法是公共的,所以您应该始终以这种或类似的方式实现它,以便它能够正确运行。至少这是我多年来学到的东西。我认为应该一直这样做,因为你不知道,谁在将来使用这种方法,你也不知道他是如何尝试使用它的。因此,您可以让代码引发
NullReferenceException
或引发更具体、更有意的异常,从而进入未定义状态。