我有一个对象列表,它是数据源。这样的事情:
public class DataList
{
public List<DataItem> SomeItems;
public void RemoveItem(DataItem item)
{
SomeItems.Remove(item);
}
}
很简单。 现在我有一个引用此数据源的XAML。这样的事情:
<layout:Accordion ItemsSource="{Binding SomeItems}" SelectionMode="ZeroOrMore" HorizontalAlignment="Stretch"
ItemTemplate="{StaticResource SomeItemTemplate}">
...
其中SomeItemTemplate模板在App.xaml中定义
<DataTemplate x:Key="SomeItemTemplate">
<Grid>
..
<Button Command={?} Content="Remove" CommandParameter="{Binding}">
</DataTemplate>
如何绑定命令以引用DataList.RemoveItem?我们的想法是将项目传递给知道所有内容的父类(DataList)。我可以在DataItem类本身中定义此方法(remove),但在这种情况下,我需要传递(在构造函数中)父类,因为项目对父项一无所知。
找到解决方案。见(http://msdn.microsoft.com/en-us/library/system.windows.data.relativesource%28v=vs.95%29.aspx)
使用
<Button x:Name="btnDeleteItem" Command="{Binding DataContext.RemoveItemCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
答案 0 :(得分:1)
如果您使用的是silverlight 5,则可以使用RelativeSource绑定:
<Button Command="{Binding DataContext.RemoveItemCommand, RelativeSource={RelativeSource AncestorLevel=2}}"/>
我们的想法是在层次结构中找到更高级的可视元素并将其作为dataContext(DataList)。