我有一个
<Grid DataContext="{Binding Path=ListOFFighters[0], Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> </Grid>
我如何改变我的Path中的索引0?也许我可以用转换器来做,但我不知道如何将它绑定到我的DataContextPath。
Path
0
DataContext
wgmfuz8q1#
您可以建立接受数组或清单以及索引的多值转换子。
public class IndexedBindingConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { return values.Length < 2 || !(values[0] is IList list) || !(values[1] is int index) ? Binding.DoNothing : list[index]; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new InvalidOperationException(); } }
转换器需要第一个参数实现IList接口,以便进行索引访问(数组和通用列表类型支持此操作)。第二个参数是索引。您必须在范围内的任何资源字典中创建转换器的示例,例如:
IList
<Window.Resources> <local:IndexedBindingConverter x:Key="IndexedBindingConverter"/> </Window.Resources>
最后,在绑定列表和索引的MultiBinding中使用转换器。
MultiBinding
<Grid> <Grid.DataContext> <MultiBinding Converter="{StaticResource IndexedBindingConverter}"> <Binding Path="ListOFFighters"/> <Binding Path="YourIndex"/> </MultiBinding> </Grid.DataContext> <!-- ...your markup. --> </Grid>
1条答案
按热度按时间wgmfuz8q1#
您可以建立接受数组或清单以及索引的多值转换子。
转换器需要第一个参数实现
IList
接口,以便进行索引访问(数组和通用列表类型支持此操作)。第二个参数是索引。您必须在范围内的任何资源字典中创建转换器的示例,例如:最后,在绑定列表和索引的
MultiBinding
中使用转换器。