Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
C# 集合属性应为只读_C#_Wpf_Mvvm - Fatal编程技术网

C# 集合属性应为只读

C# 集合属性应为只读,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在为我的WPF MVVM程序集使用FxCop,它给了我一个错误 集合属性应为只读 但是在我的属性中,我需要引发PropertyChangedEvent,现在如果我通过删除其set部分将属性设置为只读,我如何引发此事件 语法有点像这样 public List Employees { get { return _employees; } set { if (ReferenceEquals(_employees, value)) re

我正在为我的WPF MVVM程序集使用FxCop,它给了我一个错误

集合属性应为只读

但是在我的属性中,我需要引发PropertyChangedEvent,现在如果我通过删除其set部分将属性设置为只读,我如何引发此事件

语法有点像这样

public List Employees
{
    get { return _employees; }
    set
    {
        if (ReferenceEquals(_employees, value))
            return;
        _employees = value;
        RaisePropertyChanged("Employees");
    }
}

您应该很少需要在集合上引发PropertyChanged事件。使集合可见,以便在添加或删除项时通知任何绑定:

public IList<Employee> Employees
{
    get; 
    private set;
}

// in your constructor:
this.Employees = new ObservableCollection<Employee>();
公共IList员工
{
得到;
私人设置;
}
//在构造函数中:
this.Employees=新的ObservableCollection();

如果您将您的收藏设置为可观察收藏,那么“重要”事件将发生在收藏中添加和删除项目时,而不是在收藏恢复时。我同意你的看法。将收藏设置为只读,但将其设置为可观察的收藏。。。当集合属性不需要为只读时,确实存在一些有效的情况!例如,如果要在工作线程中加载大量数据集合,则需要将该数据加载到单独的集合中,然后完全替换现有集合。如果您试图在适当的位置进行更改,这是不可能的,因为您需要不断调用主dispatcher.lol ok上的更改-为了避免否决票,我将更改措辞。让我们假设需要一个可设置集合是一种边缘情况。FxCop是对的。属性上的
readonly
关键字?你注意到私有setter了吗?我承认在构造函数之后写入这个属性在技术上是可能的,但它是你的类-它不会被滥用。@MattHamilton:(你需要明确地称呼我,否则我不会得到通知)是的,我注意到了,当然你不能在属性上使用那个关键字,关键是,这不应该用auto属性来完成,而应该用普通属性来完成,它只有一个私有只读字段的getter。否则,该属性可能会在类内的任何时候意外地被覆盖,这是您应该使之不可能的,因为您可以这样做。