如何获取observablecollection中的对象索引作为参数传递

时间:2012-12-03 18:11:13

标签: c# object collections parameters indexing

所以这就是:

Bowls = new ObservableCollection<Bowl>();

SowCommand = new DelegateCommand(param => SowGame(param));

private void SowGame(Object param)
{
Int32 index = Convert.ToInt32(param);

Bowls[index] = ...
}

所以我按下按钮Command =“{Binding SowCommand}”将“param”传递给SowGame

param现在是碗型的对象

在SowGame中我想用这个碗对象做一些事情,我知道可以通过使用Bowls [对象索引]来访问集合中的某个对象。但是如上所述将对象转换为int似乎不起作用。

如何获取传递对象的索引?

2 个答案:

答案 0 :(得分:1)

使用ObservableCollection的IndexOf方法:

int index = Bowls.IndexOf((Bowl)param);

答案 1 :(得分:0)

我明白了!这是导致问题的原因:

SowCommand = new DelegateCommand(param => SowGame(param));

为了能够获得按下按钮的索引(与上述命令绑定),您需要做两件事:

首先,您需要实现一个以某种方式计算集合中元素索引的函数。例如,在我的情况下:

public Int32 Number { get {

            if (Y == 0)
            {
                return _Size - 1 - X;
            }
            else
            {
                return _Size + X;
            }

        } }

当然获取索引的方法取决于问题。上面的代码是我的碗类型实现的一部分。

在此之后你必须添加

Command Parameter="{Binding Number}"

到您的 .xaml ,问题中的代码应该可以正常运行。