WPF 使用元素 属性 作为索引值绑定到单个列表项
WPF Binding To Single List Item Using Element Property As Index Value
我正在尝试绑定到集合中的单个项目,但我需要能够从元素中传入一个值作为索引。以下是我要完成的示例。
ViewModel
public Dictionary<string, string> ListOfString = new Dictionary<string, string>
{
{"0", "TextToDisplay" }
};
查看
<TextBox Tag="0" Text="{Binding ListOfString[Self.Tag]}" />
我不确定如何获取 TextBox.Tag
的值并将其传递给 ListOfString
您可以使用 MultivalueConverter
,您将在其中传递 ListOfStrings
Dictionary
和 TextBox
的 Tag
属性,例如所以:
<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;
}
}
我正在尝试绑定到集合中的单个项目,但我需要能够从元素中传入一个值作为索引。以下是我要完成的示例。
ViewModel
public Dictionary<string, string> ListOfString = new Dictionary<string, string>
{
{"0", "TextToDisplay" }
};
查看
<TextBox Tag="0" Text="{Binding ListOfString[Self.Tag]}" />
我不确定如何获取 TextBox.Tag
的值并将其传递给 ListOfString
您可以使用 MultivalueConverter
,您将在其中传递 ListOfStrings
Dictionary
和 TextBox
的 Tag
属性,例如所以:
<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;
}
}