【问题标题】:How to bind observable collections to view number of items present in observable collection? [duplicate]如何绑定可观察集合以查看可观察集合中存在的项目数? [复制]
【发布时间】:2014-12-08 13:53:53
【问题描述】:

大家好,我正在做一个通过 telnet 配置网络设备的项目,我正在使用 C# Wpf。问题是我有一个可观察的集合,我想显示可观察集合中存在的项目数,但它没有显示。我试过以下:

 public ObservableCollection<VLANSPropertyClass> vlan { get; set; }

  public int Vlans
        {
            // Retreive value from Configuration Library
            get
            {
                return this.vlan.Count;

            }
        }

XAML 是:

 <TextBlock Margin="3,0"  
        Style="{StaticResource SummaryValues}"  
        Text="{Binding Path=Vlans}"
        Visibility="Visible"
        />

现在它没有显示任何东西。任何帮助都将是非常可观的:)

【问题讨论】:

  • vlan 是在调用 vlan get 之前创建的吗?你有没有调试过并看到那行调用。

标签: c# wpf xaml observablecollection


【解决方案1】:

最简单的方法是简单地绑定到 vlan.Count(在我的示例中,我使用了文本框,但 textBlock 不需要 OneWay)。不需要额外的属性或 INotifyPropertyChanged。添加到集合中会自动更新计数。

<TextBox Text="{Binding vlan.Count, Mode=OneWay}" />

<TextBlock Text="{Binding vlan.Count}" />

【讨论】:

  • 但是为什么要使用文本框呢?最好使用 TextBlock。那么也不需要指定Mode=OneWay
  • 使用你想要的任何控件,关键是绑定到集合的计数。这只是一个例子
  • 文本块没有显示任何内容,它在后端控制台中显示计数但在我的视图中没有显示。
【解决方案2】:

绑定不知道何时更新目标。您需要实现 INotifyPropertyChanged,订阅 .CollectionChanged 并在 Vlan(计数)更改时引发 PropertyChanged 事件。

【讨论】:

  • 是的,我知道该怎么做?
【解决方案3】:

您可以在 ObservableCollection 之上使用 ListCollectionView。

在您的 ViewModel 中,将它们定义为:

    ObservableCollection<VLANSPropertyClass> vlan;
    public System.Windows.Data.ListCollectionView CountingView { get; private set; }

然后,将集合初始化为 ObservableCollection:

CountingView = new System.Windows.Data.ListCollectionView(vlan);

在您的 xaml 中,绑定到集合的 Count 属性:

<TextBlock Margin="5" Height="35" Width="50" Text="{Binding CountingView.Count}" />

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多