【MVVM Dev】ComboBox嵌入CheckBox的来得问题

基础数据结构与算法

现在生少数个不同的JSON,比较复杂,可以参照这里的DEMO中归的JSON。要于它们的差距,除了用现成的家伙而beyond compare外边,如果我们的机器上从不设置之家伙,能如何较快解决?作为一个程序员,一个个比照是不可行的,对比了呢无见面有啊得。我会见把的放进Excel中(如果您机器并这个还未曾,那忽视自己),先排序,再用二分法失去飞稳定找到有差异的JSON属性,即使是1024独字段的很数据,也绝多10不善的稳即可找到。其实算法就东西,并无是受您同道题目然后拿死记下来的情节背出,而是当你遇上相应的情景时,能想到用这个主意去化解。

      
为了解决是题目,网上有这般几只章程,大多是再次写ComboBox:

作用域

依傍过一些种之编程语言,作用域问题还是外常讲了。在javascript中愈发有函数的作用域这等同基础知识。关于这,推荐《javascript权威指南》。当时自家是管中文的朗读去重新错过念英文,把英文的诵读毕去追寻图解,才感到到将及时一点领略掌握的。

 

选择器

每当一个HTML DOM
树中,我而拓展一个比较复杂的素选择,未含有某些文字的隐含某某类名的元素的邻居的父元素的……然后怎么开?写一个分外复杂的jQuery选择器?打住。jquery选择器原理是因此正则表达式去说你的选项器字符串(这同一片段号称Sizzle),然后还用内置的片段遍历函数如prev,next等(其实这些函数也是基于DOM提供的点子),去找到您想要的元素。我会见无错过盲目地进行Sizzle的语义歧义测试,而是自己因自己的逻辑去用prev,next等错过找到好的因素;而且下降一万步吧,我呢会见尽量避免使用复杂的选择器(之前的方案吗时有发生提及),单位只要素用ID,多独因素用类,绝对高效规范。

读前端的同窗等,欢迎加入前端学习交流群

前者学习交流QQ群:461593224

       例如:CheckBox项有A,B,C  
那么勾选这三项,ComboBox会显示A,B,C

片状元素/内联元素,盒子模型

HTML/CSS有一个特色,不会见报错,只见面生浏览器渲染出来的结果不符合规划之逻辑斯题材,所以遇到题目常常为颇为难将到网上去搜寻答案。所以要是将HTML/CSS写好,首先要团结知道中的局部基础原理,要说HTML布局,块状元素/内联元素里的涉及自觉着是极基础的,延伸出,就是CSS盒子模型。另外,HTML中元素的嵌套组合关系吗是深主要之,CSS中广大性能,如position,z-index,都是冲大对象而言的,撇开HTML去谈话CSS是纸上谈兵的。换而言之,要在结构(Structure)之下谈论表现(Presentation)。充分知情HTML/CSS中的这些基础,然后制定出适用的同样效规范方案,绝对让集体的工作效率提高,事半功倍。

ViewModel部分:

HTML/CSS就可知好的政工,无必要将她交给javascript去举行

HTML5遭到一个比充分的改进是说明单项、多了很多实用性质如required,date控件等,但是表单的一对百般基础之用法,还是未可知忘却的。曾经碰到了有人想只要落实点击radio旁边的文时也只要选中radio,于是就就此jQuery去摘,写事件。其实,这个力量,只待用一个label标签把input包含在其间就是可以兑现了)。还有一对事例,如IE的标准化注释,CSS
hack,这些成效我吧见过去用javascript去贯彻

  1. if(isIE() && IE.Verson == 7){//这些是人有封装好的方法
  2. $(".something").css({width:"700px"})
  3. }

这般的代码只会无偿消耗浏览器的性。HTML/CSS就能做到的事情,无必要把它交给javascript去做

       但有时候我们会发现,点击CheckBox时,ComboBox会冒出对象的称,而未是咱怀念如果之text

DOCTYPE

既项目中碰到这么一个题材,用任何浏览器打开页面是好之,唯独是IE8打开时特别地慢。我留意到IE8打开时缓缓而CPU消耗并无高,只是网页空白很漫长无渲染出来,可以解除JS算法上的题目。经过细致研读代码发现,有人把部分script、 link等标签放到了DOCTYPE的前面。DOCTYPE是因此来告诉浏览器解释一切文档的等同套法则的,一定要是放在HTML部分的无比前边,先来script标签,那便代表浏览器就起来分解了,后面再发生DOCTYPE否是尚未意思之了。把DOCTYPE放开HTML部分的绝前,一开始提及的题目虽化解了。

 <ComboBox Grid.Row="2" 
           Grid.Column="1"
           Margin="0"
           x:Name="checkedComboBox"
           IsEditable="True"
           IsReadOnly="True"
           ItemsSource="{Binding ModelTypes}"
           Text="{Binding Text,Mode=OneWay}"
           VerticalAlignment="Bottom" >
        <ComboBox.ItemTemplate>
             <DataTemplate DataType="{x:Type projectSetting:ModelType}">
                  <CheckBox Content="{Binding Name}"
                            IsChecked="{Binding IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />  
             </DataTemplate>
        </ComboBox.ItemTemplate>
</ComboBox>

JQuery

 

HTML/CSS

      

javascript

      
在ComboBox中置放若干只CheckBox时,当我们勾选一些CheckBox,ComboBox会显示相应的勾选项。

HTTP协议

今天众多型中还是用ajax去付出JSON到后台了,原始的那种HTTP提交已经比较少见(至少在自家之种被凡这般),但是我们呢非能够忘掉设置form的method、action的原始提交方式,因为是才是表单提交的原型,有助于我们领略HTTP协议,例如POST和GET的分,理解数据是何等从前端到达后端的,又是什么从后端返回到前者。当您懂得了此,就好再好地跟后端进行沟通,遇到数据及之问题吗能够比快地定位解决。

      
但是这些方法极其难为

       1.
https://www.codeproject.com/articles/563862/multi-select-combobox-in-wpf

 

二、示例

也就是说在ComboBox的DropDownClose中落实ViewModel中之Text刷新操作即可。

View部分:

  public void UpdateText()
  {
        switch (CheckedRootModelTypes.Count)
        {
                case 0:
                    Text = "<无>";
                    break;
                case 1:
                    Text = CheckedRootModelTypes.First().Name;
                    break;
                default:
                    Text = string.Join(";",
                        CheckedRootModelTypes.Select(x => x.Name).ToArray());
                    break;
         }

        RaisePropertyChanged(() => Text);
  }

       2.
http://blog.sina.com.cn/s/blog\_7f83849b010164yp.html

     

View的后台部分:

一、前言

 checkedComboBox.DropDownClosed += CheckedComboBox_DropDownClosed;


  private void CheckedComboBox_DropDownClosed(object sender, System.EventArgs e)
  {
     BSViewModel vm = DataContext as BSViewModel;
     vm.UpdateText();
  }

       例如:CheckBox有三桩A,B,C
它们的种且是XModel类型,Text分别吗A,B,C。
有时候ComboBox会显示成”XModel”