2012-05-02 62 views
0

我创建了一个非常简单的视图模型包含以下收集WPF双向组合框绑定更新不及时

public ObservableCollection<Reader> Readers 
    { 
     get 
     { 
      if(_readers == null) 
      { 
       _readers = new ObservableCollection<Reader>(); 
      } 

      return _readers; 
     } 

     set 
     { 
      _readers = value; 
     } 
    } 

,当一些选择器改变我添加一个Reader来收集像这样:

_activeServer.Readers.Add(Readers.Instance.AllReaders[0]); 

我已将DataContext设置为包含Readers集合的类,并尝试将ComboBoxes的ListBox绑定到项目如下:

<ListBox Name="_lbLanes" 
        BorderThickness="0" 
        Height="200" 
        ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
        ItemsSource="{Binding Readers}" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <ComboBox Name="_cbReaders" 
           Margin="0,0,0,10" 
           ItemsSource="{Binding Source={x:Static models:Readers.Instance}, Path=AllReaders}" 
           DisplayMemberPath="Name" 
           SelectedItem="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
           MinWidth="400"> 
         </ComboBox> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 

       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Vertical"/> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
      </ListBox> 

您可以看到,我自己绑定并将模式设置为TwoWay。

而且我已经试过的SelectedValue以及selectedItem设置的约束,并都产生以下问题......

当我点击保存提交的页面我查了读者集合的内容的项目,所有被设置为其初始值,它等于 Readers.Instance.AllReaders [0] 这将是正确的我猜如果我不想双向绑定,但我这样做,这是可能的,或者我必须去手动获取在所有组合框中选择的项目?

提前感谢您抽出时间回复

回答

0

我不认为你可以绑定双向这样。

也许this是你想要的。

而只是因为“双向绑定需要Path或XPath”。并不意味着,你应该把它设置为相同的值。您应该真的为您的ListBox创建特定的对象,它将包含Reader作为属性。