WPF ComboBox Does NOT Have a Right Item Selected When Initialized
2019-05-11
WPF ComboBox Does NOT Have a Right Item Selected When Initialized
Sometimes even we set all done (Set data binding correctly) for a ComboBox for in WPF, but the ComboBox can not still show current item but just an empty selection.
For this issue, we can use a separate thread to set the current item ID.
public class MyItem : baseClass
{
private int _myID;
public int MyID
{
get { return _myID; }
set
{
_myID = value;
NotifyPropertyChanged("MyID");
}
}
private string _myName;
public string MyName
{
get { return _myName; }
set
{
if (_myName != value)
{
_myName = value;
NotifyPropertyChanged("MyName");
}
}
}
}
...
...
public class MyElement : VMBase
{
private int _id;
public int ID
{
get { return _id; }
set
{
if (value != _id)
{
_id = value;
NotifyPropertyChanged("ID");
}
}
}
private string _name;
public string Name
{
get
{
return _name;
}
set
{
if (value != _name)
{
_name = value;
NotifyPropertyChanged("Name");
}
}
}
}
...
public ObservableCollection<MyElement> MyElementList { get; set; }
...
...
//Xaml
<ComboBox Height="23" Width="225" SelectionChanged="cboTrippedElement_SelectionChanged" Cursor="Hand" Margin="0,0,5,0"
ItemsSource="{Binding MyElementList}" DisplayMemberPath="Name" SelectedValuePath ="ID" SelectedValue="{Binding Path=MyID}" />
...
Sometimes the ComboBox above does not work correctly - no a pre-selected item but just leave empty
There is a solution here:
When get data, use a seperate thread to set the ID:
//this will happen in interrupting device ComboBox and in Edit mode, if use selects an item from another Contingency list, existing interruput
//device might be the same, if no a dispatcher event is launched, the combox will not a pre-selected item but show an empty selection
System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() => this.MyID = this.MyID),
System.Windows.Threading.DispatcherPriority.ApplicationIdle);