wpf 绑定到索引器

发布于 2024-10-08 23:14:04 字数 280 浏览 5 评论 0原文

<TextBlock Text="{Binding Path=[0]} />

或者

<TextBlock Text="{Binding Path=[myKey]} />

工作正常。但是有没有办法将变量作为索引器键传递?

<TextBlock Text="{Binding Path=[{Binding Column.Index}]} />
<TextBlock Text="{Binding Path=[0]} />

or

<TextBlock Text="{Binding Path=[myKey]} />

works fine. But is there a way to pass a variable as indexer key?

<TextBlock Text="{Binding Path=[{Binding Column.Index}]} />

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

空袭的梦i 2024-10-15 23:14:04

处理此问题的最快方法通常是使用带有 IMultiValueConverter 的 MultiBinding,该 IMultiValueConverter 接受集合及其绑定的索引:

<TextBlock.Text>
    <MultiBinding Converter="{StaticResource ListIndexToValueConverter}">
        <Binding /> <!-- assuming the collection is the DataContext -->
        <Binding Path="Column.Index"/>
    </MultiBinding>
</TextBlock.Text>

然后转换器可以根据这两个值进行查找,如下所示:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    if (values.Length < 2)
        return Binding.DoNothing;

    IList list = values[0] as IList;
    if (list == null || values[1] == null || !(values[1] is int))
        return Binding.DoNothing;

    return list[(int)values[1]];
}

The quickest way to handle this is usually to use a MultiBinding with an IMultiValueConverter that accepts the collection and the index for its bindings:

<TextBlock.Text>
    <MultiBinding Converter="{StaticResource ListIndexToValueConverter}">
        <Binding /> <!-- assuming the collection is the DataContext -->
        <Binding Path="Column.Index"/>
    </MultiBinding>
</TextBlock.Text>

The converter can then do the lookup based on the two values like this:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    if (values.Length < 2)
        return Binding.DoNothing;

    IList list = values[0] as IList;
    if (list == null || values[1] == null || !(values[1] is int))
        return Binding.DoNothing;

    return list[(int)values[1]];
}
满天都是小星星 2024-10-15 23:14:04

这需要 IValueConverter IMultiValueConverter

This calls for a IValueConverter IMultiValueConverter.

画骨成沙 2024-10-15 23:14:04

不,恐怕不是。此时,您可能应该考虑创建一个视图模型来塑造您的数据,以便更容易绑定到它。

No, I'm afraid not. At this point you should probably consider creating a view model that shapes your data to make it easier to bind to it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文