Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ObservableCollection.Count绑定到WPF标签_Wpf_Count_Bind_Observablecollection_Zero - Fatal编程技术网

将ObservableCollection.Count绑定到WPF标签

将ObservableCollection.Count绑定到WPF标签,wpf,count,bind,observablecollection,zero,Wpf,Count,Bind,Observablecollection,Zero,我有一个简单的标签,它应该包括可观察集合属性的绑定.Count值 问题是,结果总是0(零)。相同的属性绑定到DataGrid,DataGrid可以完美地工作,甚至在集合中发生更改时更新 我做错了什么 这是我的密码: <Label ContentStringFormat="Members: {0}"> <Label.Content> <Binding Path="MembersList.Count" Mode="OneWay" UpdateSo

我有一个简单的
标签
,它应该包括
可观察集合
属性的绑定
.Count

问题是,结果总是0(零)。相同的属性绑定到DataGrid,DataGrid可以完美地工作,甚至在集合中发生更改时更新

我做错了什么

这是我的密码:

<Label ContentStringFormat="Members: {0}">
    <Label.Content>
        <Binding Path="MembersList.Count" Mode="OneWay" UpdateSourceTrigger="Default" />
    </Label.Content>
</Label>

该属性看起来像:

public static ObservableCollection<Mitglied> MembersList { get; set; }
公共静态ObservableCollection成员列表{get;set;}

我只能假设您实际上没有向收藏中添加任何项目。如果你认为你是,你就得给我们一个更完整的报告

这对我来说非常有效:

main window.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; }
        }
    }
}
名称空间SO18124125
{
使用System.Collections.ObjectModel;
使用System.Windows;
公共部分类主窗口:窗口
{
私有静态只读ObservableCollection项=新ObservableCollection();
公共主窗口()
{
初始化组件();
this.DataContext=this;
this.addButton.Click+=委托
{
项目。添加(“foo”);
};
}
公共静态可观测集合项
{
获取{返回项;}
}
}
}
顺便说一句,这要简洁得多:

<Label Content="{Binding Items.Count}" ContentStringFormat="Members: {0}"/>

你可以试试这个

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();
     }
 }
int计数器=0;
私有静态ObservableCollection_MemberList=新ObservableCollection();
//假设它是字符串类型。我把它当作字符串类型来检查我的案例
公共静态ObservableCollection成员列表
{
获取{返回主窗口。_MemberList;}
设置{MainWindow.\u MemberList=value;}
}
主窗口()
{
初始化组件();
成员名单。添加(“0”);
成员名单。添加(“1”);
成员名单。添加(“2”);
Label1.DataContext=这个;
}
私有无效按钮\u单击(对象发送者,路由目标e)
{          
尝试
{
会员名单。移除(柜台);
计数器++;
}
捕获(例外情况除外)
{
字符串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>

您好,您必须在收集更改时通知,然后它才能工作

    public class ViewModel: INotifyPropertyChanged
{
    public ObservableCollection<string> MembersList { get; set; }

    public ViewModel()
    {
        MembersList = new ObservableCollection<string>();
        MembersList.CollectionChanged += collection_CollectionChanged;
        MembersList.Add("wfwef");
    }

    void collection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        Notify("MembersList.Count");
    }

    private void Notify(string propName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }


    public event PropertyChangedEventHandler PropertyChanged;
}
公共类视图模型:INotifyPropertyChanged
{
公共ObservableCollection成员列表{get;set;}
公共视图模型()
{
MembersList=新的ObservableCollection();
MembersList.CollectionChanged+=集合\u CollectionChanged;
成员名单添加(“wfwef”);
}
无效集合\u集合已更改(对象发送方,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
通知(“会员名单计数”);
}
私有void Notify(字符串propName)
{
if(PropertyChanged!=null)
PropertyChanged(这是新PropertyChangedEventArgs(propName));
}
公共事件属性更改事件处理程序属性更改;
}

DataGrid使用此collectionChanged,因此适用于DataGrid。

您是否在数据绑定类上实现INotifyPropertyChanged?您指的是哪个类?米格利德?是的,无论MembersList属性在哪个类中,我都会这样做。为了使绑定能够工作,您正在从外部源加载集合,需要在类上实现INotifyPropertyChanged,并在对属性调用集合时引发PropertChanged事件。顺便说一句,
observedcollection
确实实现了INPC,并且为
Count
属性提高了
PropertyChanged
。但它是一个observedcollection。它不应该更新吗?UI初始化后,集合将被填充。Datagrid自动刷新。标签值保持为0.0。确定。我也这么做了。没有变化,我一开始就是这么做的。公共主窗口(){Var.MembersList=new ObservableCollection();Var.SchoolList=new ObservableCollection();InitializeComponent();ConnectToDataBase();Var.MembersList=new ObservableCollection(SQL.selectMitglieder());}但这对我不起作用…好吧。你知道赖特在哪里。我必须在初始化UI之前添加这些项。不,它工作正常,更新完美。非常感谢。