这可能是一个非常愚蠢的问题,但我无法弄明白。 假设我有这两个类所代表的数据结构:
class Accessor
{
}
class Row : INotifyCollectionChanged
{
public object this[Accessor index] {get;}
}
如果我也有这样的视图模型:
class ViewModel
{
public Row CurrentRow{get;}
public Accessor CurrentAccessor {get;}
}
如何在XAML中定义CurrentRow[CurrentAccessor]
绑定?我试过用
{Binding Path=CurrentRow[{Binding Path=CurrentAccessor}]}
,但这似乎不起作用。
更新:我应该指出Row类是一个实现INotifyCollectionChanged
接口的集合,因此使用这样的简单属性包装器
如果存储在CurrentRow [CurrentAccessor]中的值发生变化,那么public object WrappedProperty { get{return CurrentRow[CurrentAccessor];}}
将无效。
答案 0 :(得分:2)
在ViewModel中,您可以创建其他属性。
class ViewModel
{
public object Obj { get { return CurrentRow[CurrentAccessor]; } }
public Row CurrentRow{ get; }
public Accessor CurrentAccessor { get; }
}
现在绑定很简单:
{Binding Obj}
答案 1 :(得分:2)
您可以使用适当的转换器将绑定更改为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();
}
}