WPF TwoWay ComboBox绑定未更新

时间:2012-05-02 14:27:57

标签: wpf binding

我创建了一个非常简单的ViewModel,它包含以下集合

 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] 这是正确的我想如果我不想要双向绑定但是我这样做,这是可能的还是我必须手动获取所有组合框中选择的项目?

提前感谢您抽出时间回复

1 个答案:

答案 0 :(得分:0)

我认为你不能像这样束缚TwoWay。

也许this就是你想要的。

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