0

这可能是一个非常愚蠢的问题,但我就是想不通。假设我有一个由这两个类表示的数据结构:

class Accessor
{
}


class Row : INotifyCollectionChanged
{
    public object this[Accessor index] {get;}
}

如果我也有这样的视图模型:

class ViewModel
{
     public Row CurrentRow{get;}
     public Accessor CurrentAccessor {get;}
}

如何CurrentRow[CurrentAccessor]在 XAML 中定义绑定?我尝试过使用 {Binding Path=CurrentRow[{Binding Path=CurrentAccessor}]},但这似乎不起作用。

更新:我应该指出 Row 类是一个实现INotifyCollectionChanged接口的集合,因此使用像这样的简单属性包装器
public object WrappedProperty { get{return CurrentRow[CurrentAccessor];}}将不起作用,因为如果存储在 CurrentRow[CurrentAccessor] 中的值发生更改,则不会有更新。

4

2 回答 2

2

在 ViewModel 中,您可以创建其他属性。

class ViewModel
{
     public object Obj { get { return CurrentRow[CurrentAccessor]; } }
     public Row CurrentRow{ get; }
     public Accessor CurrentAccessor { get; }
}

现在绑定很简单:

{Binding Obj}
于 2013-01-20T20:38:29.790 回答
2

您可以使用适当的转换器将您的 Binding 更改为MultiBinding :

<MultiBinding Converter="{StaticResource RowAccessorConverter}">
    <Binding Path="CurrentRow"/>
    <Binding Path="CurrentAccessor"/>
</MultiBinding>

转换器可能如下所示:

public class RowAccessorConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var row = values[0] as Row;
        var accessor = values[1] as Accessor;
        return row[accessor];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
于 2013-01-20T21:13:48.390 回答