我有一個組合框綁定到查看模型列表屬性。此列表屬性然後調用數據層中的異步函數。WpfCombo box itemsource綁定回調
我想將組合框的選定索引屬性設置爲「零」I.e selected index = 0;
真實場景是數據完美加載,但即使設置了選定的索引屬性,它也不會在異步調用後應用。
請讓我知道財產保稅後的任何回調方法。
我有一個組合框綁定到查看模型列表屬性。此列表屬性然後調用數據層中的異步函數。WpfCombo box itemsource綁定回調
我想將組合框的選定索引屬性設置爲「零」I.e selected index = 0;
真實場景是數據完美加載,但即使設置了選定的索引屬性,它也不會在異步調用後應用。
請讓我知道財產保稅後的任何回調方法。
我已經作出了示例應用程序
視圖模型
class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<string> _source;
private object _lock = new object();
public IEnumerable<string> Source
{
get { return _source; }
}
public String SelectedItem { get; set; }
public int SelectedIndex { get; set; }
public MainWindowViewModel()
{
_source = new ObservableCollection<string>();
BindingOperations.EnableCollectionSynchronization(_source, _lock);
Task.Factory.StartNew(() => PopulateSourceAsunc());
}
private void PopulateSourceAsunc()
{
for (int i = 0; i < 10; i++)
{
_source.Add("Test " + i.ToString());
Thread.Sleep(1000);
}
//SelectedItem = _source[6];
SelectedIndex = 5;
OnPropertyChanged("SelectedIndex");
}
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
的Xaml
<StackPanel>
<ComboBox ItemsSource="{Binding Source}"
SelectedItem="{Binding SelectedItem}"
SelectedIndex="{Binding SelectedIndex}">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
</StackPanel>
代碼後面
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
BindingOperations
類是在0命名空間
非常感謝Sandesh。另外爲什麼我們使用
是的,它會工作。對於如此小的物品清單,這並沒有什麼不同。當您的組合框中有數百個項目時,它將大大提高性能 – Sandesh
請讓我們知道你到目前爲止已經嘗試過 – Rohit
我試過在itemsource中的IsAsync = true屬性。但它在某個時間工作,但並非總是如此。 – user2478122