Подтвердить что ты не робот

С# WPF Combobox выберите первый элемент

Goodday,

Я хочу, чтобы мой combobox выбирал первый элемент в нем. Я использую С# и WPF. Я прочитал данные из DataSet. Чтобы заполнить поле со списком:

DataTable sitesTable = clGast.SelectAll().Tables[0];
cbGastid.ItemsSource = sitesTable.DefaultView;

Комбинированный код XAML:

<ComboBox 
   Name="cbGastid" 
   ItemsSource="{Binding}" 
   DisplayMemberPath="Description" 
   SelectedItem="{Binding Path=id}"
   IsSynchronizedWithCurrentItem="True" />

Если я попробую:

cbGastid.SelectedIndex = 0; 

Это не работает.

4b9b3361

Ответ 1

Обновите свой XAML следующим образом:

<ComboBox 
        Name="cbGastid" 
        ItemsSource="{Binding}" 
        DisplayMemberPath="Description" 
        SelectedItem="{Binding Path=id}"
        IsSynchronizedWithCurrentItem="True"
        SelectedIndex="0" />  // Add me!

Ответ 2

Попробуйте это, а не SelectedIndex

cbGastid.SelectedItem = sitesTable.DefaultView.[0][0]; // Assuming you have items here.

или установите его в Xaml

<ComboBox 
        Name="cbGastid" 
        ItemsSource="{Binding}" 
        DisplayMemberPath="Description" 
        SelectedItem="{Binding Path=id}"
        IsSynchronizedWithCurrentItem="True"
        SelectedIndex="0" />

Ответ 3

Попробуйте это,

удалите из кода С# следующую строку:

cbGastid.ItemsSource = sitesTable.DefaultView; 

и добавьте это:

cbGastid.DataContext = sitesTable.DefaultView

Ответ 4

Это работает для меня, если я добавлю свойство SelectedIndex в свою виртуальную машину с надлежащей привязкой в ​​xaml. Это в дополнение к ItemSource и SelectedItem. Таким образом, SelectedIndex по умолчанию равен 0, и я получил то, что хотел.

    public List<string> ItemSource { get; } = new List<string> { "Item1", "Item2", "Item3" };
    public int TheSelectedIndex { get; set; }

    string _theSelectedItem = null;
    public string TheSelectedItem
    {
        get { return this._theSelectedItem; }
        set
        {
            this._theSelectedItem = value;
            this.RaisePropertyChangedEvent("TheSelectedItem"); 
        } 
    }

И правильная привязка в xaml;

    <ComboBox MaxHeight="25"  Margin="5,5,5,0" 
      ItemsSource="{Binding ItemSource}" 
      SelectedItem="{Binding TheSelectedItem, Mode=TwoWay}"
      SelectedIndex="{Binding TheSelectedIndex}" />

Ответ 5

Обновите свой XAML с помощью этого кода:

<ComboBox 
   Name="cbGastid" 
   ItemsSource="{Binding}" 
   DisplayMemberPath="Description" 
   SelectedItem="{Binding Path=id, UpdateSourceTrigger=PropertyChanged, Mode=OneWayToSource}"
   IsSynchronizedWithCurrentItem="True" />

Надеюсь, что он работает:)

Ответ 6

Попробуйте это.

    int selectedIndex = 0;
    cbGastid.SelectedItem = cbGastid.Items.GetItemAt(selectedIndex);

Код XAML:

    <ComboBox 
        Name="cbGastid" 
        ItemsSource="{Binding}" 
        DisplayMemberPath="Description" 
        SelectedItem="{Binding Path=id}"
        IsSynchronizedWithCurrentItem="True" />

Ответ 7

Позвольте мне поделиться своим решением, которое сработало для меня после нескольких испытаний, вот мой поле со списком,

        <ComboBox   
                Name="fruitComboBox"
                ItemsSource="{Binding Fruits}"
                SelectedIndex="0"
                SelectedValue="{Binding ComboSelectedValue}"
                IsSynchronizedWithCurrentItem="True">

        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <i:InvokeCommandAction Command="{Binding displayFruitName}"         
                                       CommandParameter="{Binding SelectedValue, ElementName=fruitComboBox}"/>
            </i:EventTrigger>
            <i:EventTrigger EventName="Loaded">
                <i:InvokeCommandAction Command="{Binding displayFruitName}"         
                                       CommandParameter="{Binding SelectedValue, ElementName=fruitComboBox}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers> 

        </ComboBox>

В моем случае мне приходилось вызывать команду каждый раз, когда новый элемент выбирается в comboBox или обновляется источник items, но элемент с нулевым индексом не выбирается при обновлении источника элемента. Итак, что я сделал, я добавил

IsSynchronizedWithCurrentItem="True"

в свойствах comboBox, он помогло.

Ниже приведен небольшой код из моей модели ViewModel:

    /// item source for comboBox
    private List<string> fruits = new List<string>();
    public List<string> Fruits
    {
        get { return fruits; }
        set 
        {
            fruits = value;
            OnPropertyChanged();
            ComboSelectedValue = value[0];
        }
    }

    // property to which SelectedValue property of comboxBox is bound.
    private string comboselectedValue;
    public string ComboSelectedValue
    {
        get { return comboselectedValue; }
        set 
        { 
            comboselectedValue = value;
            OnPropertyChanged();
        }
    }

Вы можете ссылаться на этот переполнение стека link и msdn ссылка для дальнейшего разъяснение относительно IsSynchronizedWithCurrentItem = "True"

Надеюсь, что это поможет!:)