假设您有一个类似于以下内容的列表
public List<Person> Persons { get; set; }
您在ItemSource
上设置ListBox
以获取人员中的数据,并且对于该列表中的每个人,您要根据社会安全号码选择其他项目。
不能将数据存储在Person中,因此一旦在列表中处理了Person,就必须获取数据。
这最终看起来有点像这个XAML
<ListBox Name="myListBox">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Label Content="{Binding Name}"/>
<ComboBox ItemsSource="{Binding MyOtherData}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
现在,我希望MyOtherData成为一个方法,它将返回一组数据,具体取决于当前的人,所以我只想拥有一个方法,像社会安全号一样引用一个参数。
这看起来怎么样?
我是WPF的新手 - XAML的东西,如果这是一个设计缺陷,请提出其他解决方案。
答案 0 :(得分:1)
WPF的方法是使用转换器。执行一个实现IValueConverter的类,并将Attribute ValueConversion添加到它。在属性中你必须说明你转换为哪种类型,int(安全号可能不是一个int但是......)可能某种列表是一个字符串数组:
[ValueConversion(typeof(int), typeof(string[]))]
public class GetThatData : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new string[]{"just","for","test"};
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
其次,您需要导入命名空间(如果您还没有这样做):
xmlns:local="clr-namespace:NamespaceWhereTheClassIs"
第三,创建一个类的对象:
<Window.Resources>
<local:GetThatData x:Key="otherData" />
</Window.Resources>
最后应用转换器whit值:
<ComboBox ItemsSource="{Binding Path=SSN, Converter={StaticResource otherData}}" />
纯粹的WPF魔术,希望你能让它发挥作用