Binding an ObservableCollection.Count to Label with WPF
12,894
Solution 1
You can try This...
MainWindow.Xaml.cs->
int Counter = 0;
private static ObservableCollection<string> _MemberList = new ObservableCollection<string>();
// Suppose it is of String type..I took it as of String type to check my case
public static ObservableCollection<string> MemberList
{
get { return MainWindow._MemberList; }
set { MainWindow._MemberList = value; }
}
MainWindow()
{
InitializeComponent();
MemberList.Add("0");
MemberList.Add("1");
MemberList.Add("2");
Label1.DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
MemberList.RemoveAt(Counter);
Counter++;
}
catch(Exception ex)
{
string strTemp=ex.Message();
}
}
MainWindow.xaml->
<Grid>
<Label Name="Label1" ContentStringFormat="Members: {0}" Margin="0,56,141,38" RenderTransformOrigin="0.158,1.154" HorizontalAlignment="Right" Width="183">
<Label.Content>
<Binding Path="MemberList.Count" Mode="OneWay" UpdateSourceTrigger="Default"/>
</Label.Content>
</Label>
<Button Click="Button_Click" Width="100" Height="20" Content="click" Margin="43,169,360,122" />
</Grid>
Solution 2
I can only assume you've not actually added any items to the collection. If you think you are, you'll have to give us a more complete repro.
This works perfectly for me:
MainWindow.xaml
<Window x:Class="SO18124125.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button x:Name="addButton">Add</Button>
<Label>
<Label.Content>
<Binding Path="Items.Count" Mode="OneWay" UpdateSourceTrigger="Default"/>
</Label.Content>
</Label>
</StackPanel>
</Window>
MainWindow.xaml.cs
namespace SO18124125
{
using System.Collections.ObjectModel;
using System.Windows;
public partial class MainWindow : Window
{
private static readonly ObservableCollection<string> items = new ObservableCollection<string>();
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
this.addButton.Click += delegate
{
items.Add("foo");
};
}
public static ObservableCollection<string> Items
{
get { return items; }
}
}
}
BTW, this is far more succinct:
<Label Content="{Binding Items.Count}" ContentStringFormat="Members: {0}"/>
Author by
Pascal
Updated on June 11, 2022Comments
-
Pascal almost 2 years
I have a simple
Label
that should include the bound.Count
value of a Property of anObservableCollection
.The thing is, that the result is always 0 (zero). The same Property is bound to a DataGrid, which works perfectly and even updates if something has changed in the Collection.
What am I doing wrong here?
Here is my code:
<Label ContentStringFormat="Members: {0}"> <Label.Content> <Binding Path="MembersList.Count" Mode="OneWay" UpdateSourceTrigger="Default" /> </Label.Content> </Label>
The Property looks like:
public static ObservableCollection<Mitglied> MembersList { get; set; }