1
7
-剪断- 好吧,忘了我上面写的。 我刚刚做了一个实验,实际上每当你在setter中做任何更有趣的事情时,selecteditem都会失去同步。我猜您需要等待setter返回,然后异步地在您的viewModel中更改该属性。 使用MVVM Light Helpers的快速和肮脏的工作解决方案(在我的简单项目中测试): 在setter中,恢复到当前文档的前一个值
它基本上在UI线程上对属性更改进行排队,ContextIdle优先级将确保它将等待UI处于一致状态。在WPF中的事件处理程序内,似乎无法自由更改依赖项属性。 不幸的是,它在视图模型和视图之间创建了耦合,这是一个丑陋的黑客。 要使DispatcherHelper.uiDispatcher工作,需要首先执行DispatcherHelper.Initialize()。 |
2
35
对于未来在这个问题上的绊脚石,这一页最终对我有用: http://blog.alner.net/archive/2010/04/25/cancelling-selection-change-in-a-bound-wpf-combo-box.aspx 它适用于组合框,但适用于列表框,因为在MVVM中,您并不真正关心调用setter的控件类型。正如作者所说,光荣的秘密是 实际上,更改基础值,然后再将其更改回来。 在单独的调度程序操作上运行这个__undo_157;也很重要。
注:
作者使用
|
3
5
知道了!我将接受马约卡的回答,因为他在回答下面的评论引导我找到了解决办法。
这是我做的:我创造了一个
请注意,这个解决方案有一个诀窍:您必须使用
谢谢你的帮助,马约卡,希望这能帮助其他人。像我一样,六个月后,当我忘记了这个解决方案… |
4
3
如果您认真对待MVVM,不希望有任何代码隐藏,也不喜欢使用
它基于这样一个概念,即在代码后面,您可以使用
行为代码如下:
在XAML中使用它:
适用于ViewModel的代码如下:
在ViewModel的构造函数中:
因此你需要参考
|
5
1
最近我遇到了这个问题,并提出了一个解决方案,它可以很好地与我的MVVM配合使用,而不需要和代码隐藏。 我在模型中创建了一个SelectedIndex属性,并将ListBox SelectedIndex绑定到它。 在View CurrentChanging事件上,我进行验证,如果失败,我只使用代码
自动取款机似乎工作得很好。可能会出现一些边缘情况,但现在,它正是我想要的。 |
6
0
束缚
如果不允许禁用的外观,样式可能会有所帮助,但由于不允许更改选择,禁用的样式可能是正常的。 也许在.NET版本4.5中,inotifydata错误信息有帮助,我不知道。 |
7
0
我有一个非常相似的问题,不同的是我正在使用
这里的基本问题是保持视图与视图模型同步。显然,在视图模型中取消选择更改请求是很简单的。因此,就我而言,我们确实需要一个更具响应性的视图。我宁愿避免将Kludges放入我的视图模型中,以绕过
因此,我的解决方案是在代码隐藏中为listview选择连接自己的同步。就我而言,完全的MVVM比默认的
这是我的密码……这也允许从视图模型中更改当前项。如果用户单击列表视图并更改所选内容,它将立即更改,如果下游的某个内容取消了更改(这是我所希望的行为),它将更改回原来的状态。注意我有
然后在我的ViewModel类中
实施
|
8
0
在.NET 4.5中,他们将延迟字段添加到绑定中。如果设置了延迟,它将自动等待更新,因此在ViewModel中不需要调度器。这适用于验证所有选择器元素,如ListBox和ComboBox的SelectedItem属性。延迟以毫秒为单位。
|
Kryptonit364 · 在DataGrid中隐藏调整大小和选择列 2 年前 |
hassan Ma · 从顶部将文本插入WPF文本块 2 年前 |
Arijit · 移动画布内绘制的矩形 2 年前 |
juraj14466 · C#WPF实时图表将点渲染为图像 2 年前 |