4
<CombobBox x:Name="cbo" 
           Style="{StaticResource ComboStyle1}"
           DisplayMemberPath="NAME"
           SelectedItem="{Binding Path=NAME}"
           SelectedIndex="1">
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <Grid>
        <TextBlock Text="{Binding Path=NAME}"/>
      </Grid>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

イベントではWindow OnLoaded、次のように設定するコードを書きましたItemsSource

cbo.ItemsSource = ser.GetCity().DefaultView;

ウィンドウをロードしている間、最初のアイテムがロードされていることがわかりますが、同時に表示されているアイテムがクリアされます。私はこのシナリオで立ち往生しており、助けていただければ幸いです。

よろしく

キショア

4

2 に答える 2

5

ItemsSourceをリセットすると、選択が混乱します。

また、SelectedItemとSelectedIndexの両方を設定しています。これらのうち1つだけを設定します。両方を設定すると、1つだけが有効になります。

さらに、SelectedItem宣言が間違っている可能性があります。 SelectedItem="{Binding NAME}"アンビエント(おそらくウィンドウレベル)DataContextのNAMEプロパティの値に等しいアイテムを探します。これは、ComboBox.ItemsSourceが文字列のリストである場合にのみ機能します。ItemTemplateが機能するので、ComboBox.ItemsSourceは実際にはCityオブジェクトのリストであると思います。ただし、SelectedItemは文字列(NAME)である必要があることをWPFに指示しています。この文字列はCityオブジェクトと同じになることはないため、結果は選択されません。

したがって、問題を修正するには、ItemsSourceを設定した後、要件とデータモデルに応じてSelectedItemまたはSelectedIndexのいずれかを設定します。

cbo.ItemsSource = ser.GetCity().DefaultView;
cbo.SelectedIndex = 1;
// or: cbo.SelectedItem = "Wellington";    // if GetCity() returns strings - probably not
// or: cbo.SelectedItem = City.Wellington; // if GetCity() returns City objects
于 2010-01-22T06:29:30.497 に答える
5

クイック アンサー :SelectedIndex = 1コード ビハインドから設定します。

XAML のコード (InitializeComponent()メソッド)が最初に実行されSelectedIndex = 1、 が設定されているようですが、ItemsSourceまだ指定されていません! だからSelectedIndex影響しません!ItemsSource (そして、前に 指定できないことを覚えておいてくださいInitializeComponent())

SelectedIndex = 1そのため、設定後に手動で設定する必要がありますItemsSource


あなたはこのようにする必要があります:

XAML

            <ComboBox x:Name="cbo"
                      Style="{StaticResource ComboStyle1}">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <TextBlock Text="{Binding Path=NAME}"/>
                        </Grid>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

コード

     cbo.ItemsSource = ser.GetCity().DefaultView;
     cbo.SelectedIndex = 1;

またはこれ:

XAML

            <ComboBox x:Name="cbo" Initialized="cbo_Initialized"
                      Style="{StaticResource ComboStyle1}">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <TextBlock Text="{Binding Path=NAME}"/>
                        </Grid>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>

コード

    private void cbo_Initialized(object sender, EventArgs e)
    {
        cbo.SelectedIndex = 1;
    }

また、同時に両方をDisplayMemberPath="NAME"設定することはできないため、削除したことに注意してください。また、両方ではなくどちらか一方を使用してください。DisplayMemberPathItemTemplateSelectedItemSelectedIndex

于 2010-01-22T08:07:29.547 に答える