从列表框项模板中的按钮调用Silverlight调用命令

时间:2011-06-01 14:24:06

标签: silverlight mvvm listboxitem icommand

我已经看过几次这个问题,但我没有看到能够找到完整的答案。

在我的项目中,我有一个用户控件,我已将其作为列表框项创建。在这个用户控件中我有一个按钮

            <Button x:Name="DetailButton"
                Grid.Column="1"
                Width="107"
                Height="23"
                Margin="196,94,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Click="MoreDetail_Click"
                Command="{Binding GetCFSDetailCommand}"
                Content="View Details [+]" />

按钮具有特定于视图的单击事件,这基本上根据可见性状态展开或折叠网格行。我在这里使用了一个事件,因为它特定于ui。该按钮还有一个在VM中调用的命令。

VM代码

public class SearchViewModel : INotifyPropertyChanged
{
    private DelegateCommand _getCFSDetailCommand;
public DelegateCommand GetCFSDetailCommand
    {
        get
        {
            if (this._getCFSDetailCommand == null)
                this._getCFSDetailCommand = new DelegateCommand(GetCFSDetailCommandExecute, CanGetCFSDetailCommandExecute);

            return this._getCFSDetailCommand;      
        }

    }
private void GetCFSDetailCommandExecute(object parameter)
    {
        //bind collection to model call here
    }

我遇到的问题是按钮上的命令“丢失”或从未在列表框项目内调用时我将视图绑定到vm,如果我将此命令放在视图中的任何其他按钮上,则命令为调用。任何人都可以帮我理解如何在列表框项目中调用绑定到按钮的命令吗?

提前谢谢

2 个答案:

答案 0 :(得分:2)

randyc, 在原始(第一篇)帖子中,您将CommandParameter绑定到列表项的本地数据上下文。在第二篇文章中你错过了绑定,我认为在第二个端口的情况下它是不可能的。 在您的情况下,我建议使用Element to Element binding从父数据上下文绑定到GetCFSDetailCommand命令。

答案 1 :(得分:1)

将usercontrol中的命令作为列表框项调用的问题是模式正在控件的上下文中查找命令。显然,列表框项目跳转到可视树之外,因此不会继承绑定 为了纠正这个问题,我需要将按钮的数据上下文显式设置为ViewModel。这最终使用Element to Element绑定解决,这允许我将用户控件的datacontext指向包含它的主视图。

希望这有帮助