我的设置中有一个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}}" />
有人可以帮助我吗?
答案 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>