WPF将文本框绑定到字符串集合的项目

时间:2011-08-26 14:34:32

标签: c# wpf xaml data-binding stringcollection

我的设置中有一个StringCollection,并希望将其中一个项目绑定到标签。

这是它的工作原理。

xmlns:p="clr-namespace:MyNamespace.Properties" 
<Label Content="{Binding Path=MyStringCollection.[2], Source={x:Static p:Settings.Default}}" />

但我想将索引绑定到另一个值,并认为这应该有效。但它没有。

<Label Content="{Binding Path=MyStringCollection.[{Binding SelectedIndex Source={x:Static p:Settings.Default}}], Source={x:Static p:Settings.Default}}" />

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

使用股票WPF,您需要使用IMultiValueConverter

public class IndexedValueConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType,
        object parameter, CultureInfo culture)
    {
        if (values.Length < 2) return null;
        var index = Convert.ToInt32(values[1], culture);
        var array = values[0] as Array;
        if (array != null) return array.GetValue(index);
        var list = values[0] as IList;
        if (list != null) return list[index];
        var enumerable = values[0] as IEnumerable;
        if (enumerable != null)
        {
            int ii = 0;
            foreach (var item in enumerable)
            {
                if (ii++ == index) return item;
            }
        }

        return null;
    }

// ... Implement ConvertBack as desired

然后在你的XAML中:

<Label>
    <Label.Resources>
        <local:IndexedValueConverter x:Key="Indexer" />
    </Label.Resources>
    <Label.Content>
        <MultiBinding Converter="{StaticResource Indexer}">
            <Binding Path="MyStringCollection"
                     Source="{x:Static p:Settings.Default}" />
            <Binding Path="SelectedIndex"
                     Source="{x:Static p:Settings.Default}" />
        </MultiBinding>
    </Label.Content>
</Label>