如何绑定到数据源类中定义的方法?

时间:2012-04-02 18:16:09

标签: silverlight binding silverlight-5.0

我有一个对象列表,它是数据源。这样的事情:

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}}"

1 个答案:

答案 0 :(得分:1)

如果您使用的是silverlight 5,则可以使用RelativeSource绑定:

<Button Command="{Binding DataContext.RemoveItemCommand, RelativeSource={RelativeSource AncestorLevel=2}}"/>

我们的想法是在层次结构中找到更高级的可视元素并将其作为dataContext(DataList)。