2012-05-18 138 views
3

我试图创建一个跟踪JobItems的应用程序。在应用程序中,用户点击“New Job”按钮创建一个JobItem。然后弹出一个新窗口(NewJobWindow),用户必须填写关于作业的信息。所需的一些信息有多个值。例如,您可以在工作项目中添加多个(字符串)业务单位。我所做的是为用户添加一个列表框来添加其中的所有业务单元。我不知道该怎么做的是绑定这个业务单元的列表框,这样每次我在其中添加一个项目时,JobItem中的Observable Collection BusinessUnits会在我单击提交按钮时添加相同的项目。我需要知道如何使用数据绑定来做到这一点。我已经搜索谷歌寻找类似的答案,但找不到任何。将列表框绑定到WPF中的类型字符串的Observable集合

编辑

这是我在我的JobItem类,我需要一个用户在NewJobWindow提交多个BusinessUnits每次都得到更新:

public ObservableCollection<string> BusinessUnit 
    { 
     get { return businessUnit; } 
     set 
     { 
      if(!BusinessUnit.Equals(value)) 
      { 
       businessUnit = value; 
       OnPropertyChanged("BusinessUnit"); 
      } 
     } 

    } 

这是什么JobWindow在xaml中看起来像在列表框中添加商务单元。我创建了一个ValidatingListBox只是这样我就可以验证用户插入列表框:

<Label Grid.Column="0" Grid.Row="5">Business Unit:</Label> 
     <my:ValidatingListBox Grid.Column="1" Grid.ColumnSpan="1" Grid.Row="5" Grid.RowSpan="1" x:Name="businessUnitBox" SelectionMode="Multiple" SelectionChanged="ValidatingListBox_SelectionChanged" ItemsSource="{Binding Path=BusinessUnit}" > 
     <my:ValidatingListBox.ValidationListener> 
       <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType=Window}" Path="BusinessUnit" Mode="TwoWay"> 
       <Binding.ValidationRules> 
        <my:ListBoxValidationRule ValidatesOnTargetUpdated="True" ></my:ListBoxValidationRule> 
       </Binding.ValidationRules> 
      </Binding> 
     </my:ValidatingListBox.ValidationListener> 
    </my:ValidatingListBox> 

回答

4

内的项目绑定很简单:

<ListBox ItemsSource="{Binding MyCollection}" /> 

其中MyCollection的是的ObservableCollection类型的属性。您不需要将项目添加到ListBox,将它们添加到集合,数据绑定将完成剩下的工作。

+0

用户需要一个UI来在窗口内添加业务单元,这就是为什么我需要在列表框中添加项目,然后需要更新对象内的集合。我将如何引用JobItem对象中的集合?请检查我的编辑,也许你会明白我想要做的更好。 – Erika

+0

@Erika,我强烈建议你阅读关于MVVM模式。 UI只是一个演示文稿。逻辑(即“添加业务单位”)必须驻留在视图模型中,而不是视图(UI)。 – Dennis

相关问题