У меня есть шаблон элемента управления Silverlight (не пользовательский элемент управления), который содержит ListBox.
В шаблоне данных ListBox у меня есть кнопка, например:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ProgressBar Grid.Column="0" Width="70" Height="20" Value="{Binding Path=Percentage}" Minimum="0.0" Maximum="100.0" />
<TextBlock Grid.Column="0" Text="{Binding Path=Percentage, StringFormat='{}{0:##0.0}%'}" Margin="10,3,3,3" HorizontalAlignment="Center" />
<TextBlock Grid.Column="1" Text="{Binding Path=File.Name}" Margin="3" />
<Button Grid.Column="2" Content="Remove" x:Name="RemoveButton" Command="{TemplateBinding DeleteCommand}" Style="{TemplateBinding UploadButtonStyle}" HorizontalAlignment="Right" Margin="0,0,5,0" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
Видите кнопку там в конце шаблона? Как я могу получить доступ к этому событию? Я не могу использовать метод GetTemplateChild (), поскольку кнопка является частью DataTemplate. Я пробовал командовать (как вы можете видеть выше). Похоже, что это путь, хотя Templated Control не совсем MVVM.
Есть идеи? Может быть, что-то кроме командования? или я неправильно командую?
вот соответствующий код:
... определения свойств / свойств зависимостей ... (должно ли это быть Dep Prop?)
public static readonly DependencyProperty DeleteCommandProperty =
DependencyProperty.Register("DeleteCommand", typeof(ICommand), typeof(MultipleFileUpload), new PropertyMetadata(null));
public ICommand DeleteCommand
{
get { return (ICommand)GetValue(DeleteCommandProperty); }
set
{
SetValue(DeleteCommandProperty, value);
FirePropertyChanged("DeleteCommand"); //INotifyPropertyChanged stuff
}
}
... в OnApplyTemplate () ...
public override void OnApplyTemplate()
{
....
DeleteCommand = new DelegateCommand(RemoveItemFromList, CanRemove);
....
base.OnApplyTemplate();
}
... Действие ICommand ...
private void RemoveItemFromList(object commandParameter)
{
//NEVER GETTING HERE!
}
Надеюсь, это что-то маленькое.
Спасибо людям!
Кевин