2011-04-04 282 views
3

我有DiscoveredHosts這是一個ObservableCollection<string>。沒有調用sourceupdated事件。有人知道爲什麼sourceupdated event not firing

<ComboBox Name="DiscoveredHostsComboBox" VerticalAlignment="Center" Grid.Column="0" 
    HorizontalAlignment="Center" MinWidth="100px" ItemsSource="{Binding Path= 
    DiscoveredHosts}" SourceUpdated="DiscoveredHostsComboBox_SourceUpdated" /> 

public void GetDomainHosts() 
{ 
    DiscoveredHosts.Clear(); 

    var adapters = NetworkInterface.GetAllNetworkInterfaces(); 

    if (Config.Debug) 
    { 
     DiscoveredHosts.Add("192.168.73.11"); 
     DiscoveredHosts.Add("192.168.73.14"); 
    } 

    foreach (var properties in adapters.Select(adapter => adapter.GetIPProperties())) 
    { 
     if (properties.DnsSuffix != "" && !DiscoveredHosts.Contains(
properties.DnsSuffix)) 
      DiscoveredHosts.Add(properties.DnsSuffix); 

     if (properties.DnsAddresses.Count <= 0) continue; 

     foreach (var host in properties.DnsAddresses.Where(host => !DiscoveredHosts. 
Any(a => a == host.ToString()))) 
      DiscoveredHosts.Add(host.ToString()); 
    } 

    OnPropertyChanged("DiscoveredHosts"); 
} 
+0

我不明白這一點:OnPropertyChanged( 「DiscoveredHosts」); 您可以添加DiscoveredHosts屬性的聲明嗎?我認爲使用ObservableCollection的想法是爲了避免「手動」調用OnPropertyChange方法。有些東西看起來不正確IMO。 – Marcote 2011-04-04 18:42:23

+0

哦,是的。我知道這就是你使用ObservableCollection的原因;然而,有人向我提出質疑,認爲這可能不會發生,我已經考慮過同樣的問題。我在這裏離開了這條線,所以沒人會說,「你爲什麼不試試......」哈哈。 public ObservableCollection DiscoveredHosts {get {return _discoveredHosts ?? (_discoveredHosts = new ObservableCollection ()); }} – Bluebaron 2011-04-04 19:23:20

回答

3

請,集NotifyOnSourceUpdated爲true SourceUpdated事件火災:

<ComboBox Name="DiscoveredHostsComboBox" VerticalAlignment="Center" Grid.Column="0" HorizontalAlignment="Center" MinWidth="100px" ItemsSource="{Binding Path=DiscoveredHosts, NotifyOnSourceUpdated=True}" SourceUpdated="DiscoveredHostsComboBox_SourceUpdated" /> 
+0

NotifyOnSourceUpdated是一個綁定選項,因此請在綁定中進行設置,而不是在控件中進行設置。 – GameAlchemist 2012-06-27 17:18:28

+0

Vincent,是的,NotifyOnSourceUpdated應該在Binding元素中。感謝您的糾正。 – 2012-08-07 07:53:10