【问题标题】:How to get index of object in observablecollection passed as parameter如何获取作为参数传递的observablecollection中对象的索引
【发布时间】:2012-12-03 18:11:12
【问题描述】:

就是这样:

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}" 将“参数”传递给 SowGame

param 现在是 Bowl 类型的对象

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

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

【问题讨论】:

    标签: c# object collections parameters indexing


    【解决方案1】:

    使用 ObservableCollection 的 IndexOf 方法:

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

    【讨论】:

    • 它返回 -1。这意味着 indexof 在碗中找不到参数,但它在里面
    • 这是否绑定到数据网格?您可以将选定的索引作为参数传递吗?
    • @GáborBirkás:您确定参数 object 在集合中,而不是看起来相同(即具有相同值)的对象吗?
    • @Dev:是的,我将每个碗都添加到了 bowls 集合中
    • @GáborBirkás:好的,这有点脱离上下文,但是如果您在 param 变量中有 Bowl 对象,为什么要获取它的索引,然后使用该索引来提取完全相同Bowls 收藏中的对象?
    【解决方案2】:

    我想通了!以下是导致问题的原因:

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

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

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

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

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

    在这之后你必须添加

    Command Parameter="{Binding Number}"
    

    到您的 .xaml 并且问题中的代码应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      相关资源
      最近更新 更多