13

Net Framework 3.5 sp1 がインストールされている wpf アプリケーションで SelectedItem をプログラムで設定しているときに混乱しました。私は百件の投稿 \topics について注意深く読みましたが、まだ混乱しています(( My xaml:

 <ComboBox name="cbTheme">
    <ComboBoxItem>Sunrise theme</ComboBoxItem>
    <ComboBoxItem>Sunset theme</ComboBoxItem> 
 </ComboBox>

項目の 1 つにIsSelected="True"プロパティを追加すると、この項目が選択されません。なぜ ?そして、私は別のコードを試してみましたが、選択したアイテムを設定できません:

cbTheme.SelectedItem=cbTheme.Items.GetItemAt(1); //dosn't work
cbTheme.Text = "Sunrise theme"; //dosn't work
cbTheme.Text = cbTheme.Items.GetItemAt(1).ToString();//dosn't work
cbTheme.SelectedValue = ...//dosn't work
cbTheme.SelectedValuePath = .. //dosn't work
//and even this dosn't work:
ComboBoxItem selcbi = (ComboBoxItem)cbTheme.Items.GetItemAt(1);//or selcbi = new ComboBoxItem
cbTheme.SelectedItem = selcbi;

SelectedItem は読み取り専用プロパティではないのに、なぜ機能しないのでしょうか? それは私の問題ではなく、マイクロソフトの問題だと思います。それとも私は何かを逃した?私は ListBox で遊んでみましたが、同じコードですべて正常に動作し、選択を設定したり、選択を取得したりできます....では、 ComboBox で何ができますか? 多分いくつかのトリック???

4

6 に答える 6

12

のアイテムを選択し、選択ComboBoxされたデフォルトのアイテムとして設定するには、以下の行を使用します。

combobox.SelectedIndex = 0; //index should be the index of item which you want to be selected
于 2012-06-30T10:12:56.190 に答える
7

プログラムでコンボボックスとアイテムを追加すると、これはうまくいきます:

ComboBox newCombo = new ComboBox();

ComboBoxItem newitem = new ComboBoxItem();
newitem.Content = "test 1";
newCombo.Items.Add(newitem);
newitem = new ComboBoxItem();
newitem.Content = "test 2";
newCombo.Items.Add(newitem);
newitem = new ComboBoxItem();
newitem.Content = "test 3";
newCombo.Items.Add(newitem);

newCombo.SelectedItem =  ((ComboBoxItem)newCombo.Items[1]);
newCombo.Text = ((ComboBoxItem)newCombo.Items[1]).Content.ToString();

newStack.Children.Add(newCombo);

ItemSourceプロパティをプログラムで設定し、テキストを選択した値に設定する場合にも機能します。

于 2010-11-16T22:20:39.480 に答える
6

ビューモデルに、テーマ リスト用のパブリック プロパティと、選択したアイテム用のパブリック プロパティを作成します。

    private IEnumerable<string> _themeList;
    public IEnumerable<string> ThemeList
    {
        get { return _themeList; }
        set
        {
            _themeList = value;
            PropertyChangedEvent.Notify(this, "ThemeList");
        }
    }
    private string _selectedItem;
    public string SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            _selectedItem = value;
            PropertyChangedEvent.Notify(this,"SelectedItem");
        }            
    }

次のように、xaml のコンボボックスをプロパティにバインドします。

    <ComboBox 
        Name="cbTheme" 
        ItemsSource="{Binding ThemeList}"      
        SelectedItem="{Binding SelectedItem}">
    </ComboBox>

これで、項目を ThemeList に追加してコンボボックスに入力するだけです。リスト内の項目を選択するには、次のように、選択した項目のテキストに selected プロパティを設定します。

    var tmpList = new List<string>();
    tmpList.Add("Sunrise theme");
    tmpList.Add("Sunset theme");

    _viewModel.ThemeList = tmpList;
    _viewModel.SelectedItem = "Sunset theme";

または、現在持っているコードを使用したい場合は、選択した項目を独自のコードで選択したい項目の文字列値に設定してみてください - それが機能するかどうかはわかりませんが、試すことができます。

于 2010-11-16T23:07:14.163 に答える
2

設定したいアイテムのインデックスがわかっている場合、この場合は index を設定しようとしているように見えますが、次のよう1にするだけです:

cbTheme.SelectedIndex = 1;

インデックスがわからないときこそ、本当の問題があることがわかりました。これは元の質問を超えていることは知っていますが、インデックスが不明であるが表示したい値が既知の場合にアイテムを設定する方法を知りたいと考えているGoogle社員にとって、ドロップダウンにItemSourcefromを入力している場合a DataTable、たとえば、次のようにしてそのインデックスを取得できます。

int matchedIndex = 0;
if (dt != null & dt.Rows != null)
{
    if (dt.Rows.Count > 0)
    {
        foreach (DataRow dr in dt.Rows)
        {
            string myRowValue = dr["SOME_COLUMN"] != null ? dr["SOME_COLUMN"].ToString() : String.Empty;
            if (myRowValue == "Value I Want To Set")
                break;
            else
                matchedIndex++;
        }
     }
 }

そして、あなたは単に行うcbTheme.SelectedIndex = matchedIndex;.

ComboBoxItem行の代わりにアイテムを同様に反復すると、代わりに OP が示すように入力されたDataRow場合、同様の結果が得られる可能性があります。ComboBox

于 2016-11-07T17:54:47.910 に答える
0

ComboBox データはバインドされていますか?

もしそうなら、あなたはおそらくコードよりもバインディングを通してそれを行う方が良いでしょう....

この質問を参照してください... WPF ListView プログラムで項目を選択

新しい SelectableObject {Text = "Abc Theme", IsCurrentlySelected = True} を作成して、SelectableObjects のコレクションを ComboBox にバインドします。

基本的に、モデルで IsCurrentlySelected プロパティを設定し、モデルから UI を更新します。

于 2010-02-10T03:06:39.523 に答える
0

回答4によると

アイテム ソースに既にアイテムを追加している場合。selectet Value の PropertyChangedEvent を発生させます。

tmpList.Add("Sunrise theme"); 
    tmpList.Add("Sunset theme");
    PropertyChangedEvent.Notify(this,"SelectedItem");
于 2012-04-12T06:47:22.487 に答える