问题一、usercontrol1控件使用了mvvm数据绑定,usercontrol2也使用了mvvm数据绑定,则
以下是伪代码
<usercontrol2 datacontent="{Binding Viewmodel}">
<usercontrol1 tag="{Binding data}">
</usercontrol1>
</usercontrol2>
usercontrol1是不能实现数据绑定的,个人猜测原因是usercontrol1内部已经做了mvvm绑定,usercontrol2不能数据绑定到usercontrol1
可借鉴的解决思路 http://www.cnblogs.com/DebugLZQ/archive/2013/06/26/3152922.html
本人则将usercontrol1的mvvm绑定放到usercontrol1的children里的子控件,比如grid
<usercontrol>
<grid datacontext="Binding mvvm">
</usercontrol>
控件不允许双重绑定,避开就行。
<TextBoxName="UserNameText"Text="{Binding Path=Username, Mode=TwoWay}"HorizontalContentAlignment="Stretch"/>
此时焦点如果还在textbox上时,后台Username的值仍为NULL
解决办法:
<TextBoxName="UserNameText"Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}"/>
问题三、Combox 下拉显示慢的问题
由于Item项多且每项显示内容多(itemtemplate复杂的话也会导致慢,比如要显示image之类的),导致使用ComboBox显示列表异常缓慢,这是由于ComboBox在展开列表时绘制了列表中的每一项,为了避免这个问题,我们可以使用VirtualizingStackPanel来代替ComboBox默认的项目面板StackPanel:
<ComboBox VerticalAlignment="Top">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
当然,应该不只是Combox有这样的问题,包括Treeview、listbox之类的控件都会有。
Reference: