Как связать с методом, определенным в классе источника данных? - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть список объектов, которые являются источником данных.Примерно так:

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, но в этом случае мне нужно передать (в конструкторе) родительский класс, потому что элемент ничего не знает о родительском.

Решение найдено.Смотрите здесь (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 Ответ

1 голос
/ 02 апреля 2012

Если вы используете silverlight 5, вы можете использовать RelativeSource привязка:

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

Идея состоит в том, чтобы найти визуальный элемент более высокой иерархии и взять его dataContext (DataList).

...