使用元素属性作为索引值绑定到单个列表项的WPF

本文关键字:单个 列表 WPF 绑定 索引值 元素 属性 | 更新日期: 2023-09-27 18:29:55

我试图绑定到集合中的单个项,但我需要能够将元素中的值作为索引传入。下面是我正在努力完成的一个示例。

ViewModel

public Dictionary<string, string> ListOfString = new Dictionary<string, string>
{ 
    {"0", "TextToDisplay" }
};

查看

<TextBox Tag="0" Text="{Binding ListOfString[Self.Tag]}" />

我不知道如何获得TextBox.Tag的值并将其传递给ListOfString

使用元素属性作为索引值绑定到单个列表项的WPF

您可以使用MultivalueConverter,在其中您将传递ListOfStrings DictionaryTextBoxTag属性,如下所示:

  <Window.Resources>
    <ns:ValuFromDicConverter x:Key="ValuFromDicConverter"/>
</Window.Resources>
<Grid>
    <TextBox Tag="0" x:Name="tb">
        <TextBox.Text>
            <MultiBinding Converter="{StaticResource ValuFromDicConverter}">
                <Binding Path="ListOfString"/>
                <Binding ElementName="tb" Path="Tag"></Binding>
            </MultiBinding>
        </TextBox.Text>
    </TextBox>
</Grid>

转换器将简单地在Dictionary:中获得相应的值

 public class ValuFromDicConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values == null) return null;
        return (values[0] as Dictionary<string, string>)[values[1].ToString()];
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

不要忘记将字典定义为属性,并设置DataContext

    private Dictionary<string, string> _listOfString = new Dictionary<string, string>
    { 
        {"0", "TextToDisplay" }
    };

    public Dictionary<string, string> ListOfString
    {
        get
        {
            return _listOfString;
        }
        set
        {
            if (_listOfString.Equals(value))
            {
                return;
            }
            _listOfString = value;
        }
    }