【发布时间】:2016-06-01 07:58:34
【问题描述】:
我有一个带有网格的UserControlBase。网格包含一个带有操作的列。
<sdk:DataGridTemplateColumn Header="Action">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Button Style="{StaticResource DataGridButton}" Command="{Binding Source={StaticResource NewsViewModel}, Path=ModifyNewsCommand}" Content="Modify" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
我的问题是我的Command。它向我抛出了技术错误,这是我的第一个问题,我不知道如何让这个应用程序向我抛出真正的错误消息。
在我的用户控件背后的代码中,我注册了事件:
protected void RegisterMessages()
{
Messenger.Default.Register<string>(this, "NewNewsBtn_Click", NewNewsBtn_Click);
Messenger.Default.Register<string>(this, "ModifyNewsBtn_Click", ModifyNewsBtn_Click);
}
在我的构造函数中:
public NewsWindow(int underlyingId)
{
InitializeComponent();
this.RegisterMessages();
viewModel = new NewsViewModel(underlyingId);
ucNewsPanel.DataContext = viewModel;
}
我的视图模型(NewsViewModel)
public ICommand ModifyNewsCommand
{
get
{
return new RelayCommand<string>(e =>
{
Messenger.Default.Send(string.Empty, "ModifyNewsBtn_Click");
});
}
}
这里奇怪的是我的NewNewsBtn 工作正常,而我的ModifyNewsBtn 没有工作。
此按钮位于网格之外,因此它可能会影响其工作的原因。
<Button x:Name="NewNewsBtn" MaxHeight="50" MaxWidth="100" Command="{Binding Path=NewNewsCommand}" Content="Add New" />
【问题讨论】:
-
为什么在 Binding 中使用 StaticResource 而不仅仅是访问 DataContext?在我看来,这是您的 Button 无法正常工作的原因。
-
我猜这部分是错误的Command="{Binding Source={StaticResource NewsViewModel}, Path=ModifyNewsCommand}"
-
@Martin - 如果删除 StaticResource 并只保留路径,则它不起作用。它没有向我抛出错误,但它没有进入方法。
-
我想我知道为什么。看我的回答。
标签: wpf silverlight mvvm