#c# #silverlight #xaml #data-binding
#c# #silverlight #xaml #привязка данных
Вопрос:
В 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:
Вы можете привязаться к имени корневого элемента
<Button Command={Binding Path=DataContext.TestCommand, ElementName=LayoutRoot}" />