С# 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;
Это не работает.
Ответы
Ответ 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"
Надеюсь, что это поможет!:)