【问题标题】:sourceupdated event not firingsourceupdated 事件未触发
【发布时间】:2011-04-04 18:16:02
【问题描述】:

我有 DiscoveredHosts,它是一个 ObservableCollection<string>。未调用 sourceupdated 事件。有人知道为什么吗?

<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");
}

【问题讨论】:

  • 我不明白:OnPropertyChanged("DiscoveredHosts");可以添加 DiscoveredHosts 属性的声明吗?我认为使用 ObservableCollection 的想法是避免“手动”调用 OnPropertyChange 方法。 IMO 看起来有些不正确。
  • 哦,是的。我知道这就是你使用 ObservableCollection 的原因;然而,有人向我提出质疑,说这可能不会发生,我已经考虑过同样的问题。我把那条线留在这里,所以没有人会说,“你为什么不试试……”哈哈。 public ObservableCollection DiscoveredHosts { get { return _discoveredHosts ?? (_discoveredHosts = new ObservableCollection()); } }

标签: c# .net wpf


【解决方案1】:

请将 NotifyOnSourceUpdated 设置为 true 以触发 SourceUpdated 事件:

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

【讨论】:

  • NotifyOnSourceUpdated 是一个绑定选项,所以在绑定中设置它,而不是在控件中。
  • 文森特,是的,确切地说,NotifyOnSourceUpdated 应该在 Binding 元素中。谢谢指正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 2019-01-31
  • 2013-04-09
  • 2015-07-25
  • 2017-06-25
  • 2012-02-21
相关资源
最近更新 更多