0

次のコレクションを含む非常に単純な 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 コレクションを含むクラスに設定し、ComboBox の 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 コレクションの内容がチェックされ、すべてが Readers.Instance.AllReaders[0] に等しい初期値に設定されます。双方向バインディングが必要ですが、これは可能ですか、それともすべてのコンボボックス内で選択されたアイテムを手動で取得する必要がありますか?

お時間を割いてご返信いただきありがとうございます

ダン

4

1 に答える 1

0

このようにTwoWayをバインドすることはできないと思います。

多分これはあなたが望むものです。

そして、「双方向バインディングにはPathまたはXPathが必要」という理由だけで。同じ値に設定する必要があるという意味ではありません。ListBox用に、プロパティとしてReaderを含む特定のオブジェクトを実際に作成する必要があります。

于 2012-05-02T15:30:04.060 に答える