WPF DataTemplate方法绑定参数
我有一个ListBox的自定义ItemTemplate,我需要将一个TextBlock“绑定”到一些特殊的方法/属性。
我的列表框源是一个ObservableCollection<SearchResultItem>
。 SearchResultItem
包含一些属性。
文本需要根据另一个对象的值进行更改。 EG如果这个对象等于“foo”我需要文本值来调用SearchResultItem
上的GetProperty("foo")
方法来获取正确的值。
这是一个代码示例:
<DataTemplate>
..
//Here is a Label bound to the Date Property of the SearchResultItem
<Label Margin="2,2,2,0" Grid.Row="0" Grid.Column="2" Content="{Binding Path=Date}" HorizontalAlignment="Right" HorizontalContentAlignment="Right" />
//Here is the textblock that needs to call the method with the parameter based on the value of the other object.
<TextBlock Margin="2,2,2,0" TextTrimming="CharacterEllipsis" Grid.Row="0" Grid.Column="1" Text="I need some help there" HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="Black"/>
..
</DataTemplate>
你有什么想法如何做到这一点或更好的方式来做到这一点?
编辑:
让我们假设SearchResultItem
来自外部库,并且只公开GetProperty
方法。
比方说,“foo”值来自ConfigurationManager.AppSettings["propertyName"];
如果有帮助。
好的,因为你的属性永不改变,这里有一个解决方案。 您可以通过SearchResultItem类的另一个属性来完成此操作:
public string MyTextBinding
{
get
{
return myDictionary.ContainsKey("foo") ? return myDictionary["foo"] : return "myDictionary doesn't contain foo";
}
}
然后将你的文本框绑定到这个属性:
<DataTemplate>
<Label Margin="2,2,2,0" Grid.Row="0" Grid.Column="2" Content="{Binding Path=Date}" HorizontalAlignment="Right" HorizontalContentAlignment="Right" />
<TextBlock Margin="2,2,2,0" TextTrimming="CharacterEllipsis" Grid.Row="0" Grid.Column="1" Text="{Binding Path=MyTextBinding, Mode=OneWay}" HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="Black"/>
</DataTemplate>
只需使用一个带有SearchResultItem
的IValueConverter
并返回预期的文本
<TextBlock Margin="2,2,2,0" TextTrimming="CharacterEllipsis"
Grid.Row="0" Grid.Column="1"
Text="{Binding Path=.,
Converter={StaticResource PropertyValueFromSearchResultItemConverter},
ConverterParameter=Foo}"
HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="Black"/>
链接地址: http://www.djcxy.com/p/44637.html