使用字符串oder List <string>在set函数之间有所不同

时间:2017-01-07 16:07:20

标签: c# data-binding

我在程序中更改了数据结构。我想要一个List而不是一个字符串。现在我对set函数有些麻烦。 这是旧代码

    private string user;
    public string User
    {
        get { return user; }
        set
        {
            user = value;
            Notify("user");
        }
    }

我不知道如何管理user = value; 这是我的尝试:

    private List<string> user;
    public List<string> User
    {
        get { return user; }
        set
        {
            user.Add(value);
            Notify("user");
        }
    }

它会抛出一个错误,因为value是一个List而无法添加到列表中。

编辑:对不起,这是一个复制粘贴错误。我通过此编辑更改了旧代码。

所以,我想要做的是将List绑定到datagrid的列。上面的代码是数据类的一部分。

这是window.xaml中的代码

     <DataGridTextColumn Header = "user" Binding="{Binding Path=User, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" MinWidth="50" />

1 个答案:

答案 0 :(得分:2)

在您的示例中,value与属性List<string>的类型相同。因此,您无法使用user.Add(value)。相反,你可以写:

private List<string> user = new List<string>();
public List<string> User
{
    get { return user; }
    set
    {
        user = value;
        Notify("user");
    }
}

但是如果你使用绑定Users到DataGrid,那么最好使用一个实现INotifyPropertyChanged的集合,如ObservableCollection<T>。这样,当从集合中添加/删除项目或刷新整个集合时,将通知视图(DataGrid)。

private ObservableCollection<string> user = new ObservableCollection<string>();
public ObservableCollection<string> User
{
    get { return user; }
    set
    {
        user = value;
        Notify("user");
    }
}

有关将ObservableCollection绑定到DataGrid的详细信息,请查看此article

顺便说一句,我认为该属性更好地命名为Users而非User,因为它是一个用户列表。