访问按钮,单击Silverlight模板控件上ListBox DataTemplate中的按钮
|
我有一个Silverlight模板控件(不是用户控件),其中包含一个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>
看到模板末尾的按钮了吗?我如何访问它的点击事件?由于按钮是DataTemplate的一部分,因此我无法使用GetTemplateChild()方法。我已经尝试过指挥(如上所示)。尽管样板控件并非完全是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!
}
我希望它很小。
谢谢大家!
凯文
没有找到相关结果
已邀请:
4 个回复
唤副埂侧壬
再次编辑: 我还将代码放在ItemsControl.PrepareContainerForItemOverride中。此方法为您提供ContentControl(如果要覆盖GetContainerForItemOverride,则为您自己的控件)和列表中的当前\“ Item \”。在这里,您还可以对ContentControl实例进行进一步的初始化-如果要执行的操作取决于绑定到该对象的对象。
闪脖
XAML:
每次单击按钮时,它将执行相同的delete命令,但会将当前项作为参数传递。 希望这可以帮助
缮淳彼誊
然后,在视图的代码背后,必须指定资源的值实际上指向表示模型上的命令。以下是来自Stock Trader RI的示例,其中将展示模型上的BuyCommand属性放入资源中。
财沟项胶