代码之家  ›  专栏  ›  技术社区  ›  TerrorAustralis

带有“新建…”项的数据绑定WPF组合框

  •  5
  • TerrorAustralis  · 技术社区  · 14 年前

    大家好

    其思想是,如果他们选择一个普通元素,它将执行一些涉及该元素的操作。如果他们选择了“New”元素,它将把他们带到一个屏幕上,在那里他们可以创建一个新的项目。
    问题是,当数据绑定某个东西时,您没有向其中添加另一个项的选项,并且没有向元素列表中添加虚拟项的问题。。。

    是否有机会基于具有“DefaultElement”属性的组合框创建新控件?(包括所有相关的模板和命令绑定等)

    3 回复  |  直到 14 年前
        1
  •  5
  •   Simon Steele    14 年前

    为此,我以前为普通类型创建了一个虚拟包装类,允许您绑定到一个列表,其中包含大多数正确的值以及您的“New…”值,例如。

    public class DisplayClass
    {
        public DisplayClass(ModelClass mc)
        {
             this.mc = mc;
        }
    
        public string Name
        {
            get { return this.mc != null ? this.mc.Name : "New..."; }
        }
    
        public bool IsDummy
        {
            return this.mc == null;
        }
    
        public ModelClass Model
        {
            return this.mc;
        }
    }
    

    然后,您可以在数据上下文(ViewModel)中承载这些内容的集合,并根据 IsDummy

        2
  •  3
  •   BradleyDotNET Aniss    11 年前

    将ItemsSource属性设置为具有新项和绑定集合的CompositeCollection,然后基于选定索引或类似内容检测该项的选择。

    示例代码:

    <ComboBox>
       <ComboBox.ItemsSource>
          <CompositeCollection>
             <ComboBoxItem>Add New Item...</ComboBoxItem>
             <CollectionContainer Collection="{Binding Source={StaticResource CollectionSource}}"/>
          </CompositeCollection>
       </ComboBox.ItemsSource>
    </ComboBox>
    

    复合采集的MSDN: http://msdn.microsoft.com/en-us/library/system.windows.data.compositecollection(v=vs.110).aspx

        3
  •  2
  •   vc 74    14 年前

    如果我是您,我会在绑定集合的第一个位置插入一个“new”实体,并在我的viewmodel中检测它,以便在用户选择它时触发相应的操作。