c#中的数据绑定奇怪地表现

时间:2013-11-19 07:38:25

标签: c# data-binding

我对我的代码有疑问:

我有一个播放器列表“私人列表播放器=新列表();”和Player是我自己疯狂的一个类,我还创建了一个Usercontrol,所有玩家的变量都是databinded。

它在我的主要形式中工作得非常好,但是当我改变形式时,我有一个奇怪的问题。

我将播放器列表作为参数提供给另一个表单,这里是代码:

    public Result(List<Player> player, string format)
    {
        InitializeComponent();
        _player = player;
        ExtentionHelpers.Shuffle<Player>(_player);
    }

Shuffle就像名字所说的那样,只是洗牌,但它应该洗牌_player,这是我的第二种形式的局部变量,我从不使用这种形式的玩家。

但是由于一些奇怪的原因,我的主要表单中的列表播放器最终也被洗牌了,我不希望这样,特别是在弄乱我的数据绑定时。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

您的播放器变量是引用类型,因此它与您在两种形式中处理的数据相同。如果你想单独操作它,你需要克隆播放器列表。

调用构造函数时,请尝试以下操作:

var frm = new Result(new List<Player>(player), "some format");

创建新列表意味着如果您更改Player类型中的数据,您可以独立于第一个 BUT 操作新列表,它会影响来自其他表单的数据(您如果你想要这个,你需要在添加到新列表之前单独克隆每个项目。