Как связать данные с DataContext дальше по дереву в Silverlight? - PullRequest
1 голос
/ 01 мая 2011

В Silverlight я создаю кнопку для каждого элемента в ObservableCollection.Я добавил ICommand для обработки этого объекта, который имеет ObservableCollection.В XAML, как мне вернуться к этому из одного из элементов коллекции?

LayoutRoot.DataContext установлен на экземпляр следующего класса:

public class MainViewModel
{
    public ICommand TestCommand { get; protected set; }

    public ObservableCollection<string> Test { get; protected set; }    

    public MainViewModel()
    {
        Test = new ObservableCollection<string>();
        Test.Add("Hello");
        TestCommand = new DelegateCommand(Test, CanTest);
    }

    private void Test(object parameter)
    {
        Test.Add("Test text");
    }

    private bool CanTest(object parameter)
    {
        return true;
    }
}

И с его помощьюс этим XAML:

<StackPanel x:Name="LayoutRoot" Background="White">
    <ItemsControl ItemsSource="{Binding Test}" />

    <Button Command="{Binding TestCommand}">Push Me</Button> <!-- I can access TestCommand when I bind to it here -->

    <ItemsControl ItemsSource="{Binding Test}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Content="{Binding}" 
                        Command="{Binding Path=TestCommand, Source=?????}" <!-- But how do I get back to the TestCommand from here? -->
                        CommandParameter="{Binding}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

1 Ответ

2 голосов
/ 01 мая 2011

Можно привязать к имени корневого элемента

<Button Command={Binding Path=DataContext.TestCommand, ElementName=LayoutRoot}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...