命令绑定在 windows 商店应用程序的 MVVM light 工具包 [5.2.0] 中不起作用

Command binding is not working in MVVM light toolkit [5.2.0] for windows store app

首先,我使用 MVVM light 工具包来构建我的 Windows Store 应用程序。所以数据上下文将在 ViewModelLocator 中设置。 我正在尝试为 Hub 控件的 header 中的按钮绑定命令。 这是我来自 XAML 的代码,其中包含按钮:

<DataTemplate x:Key="DataTemplate10">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="700"/>
                    <ColumnDefinition Width="800"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="user trading terminal"
                           Width="Auto"
                           Height="70"
                           Grid.Column="0"/>
                <Button Content="sign in" Grid.Column="1"
                        Width="Auto"
                        HorizontalAlignment="Right" Command="{Binding                SignIn}"/>
            </Grid>
        </DataTemplate>

这是我的 Hub Control 的 XAML 代码,来自我在数据模板上方调用的地方:

<Hub Header="user trading terminal" HeaderTemplate="{StaticResource DataTemplate10}">
            <Hub.Background>
                <ImageBrush Stretch="Fill" ImageSource="ms-appx:///Assets/HubImages/BackGround.jpg"/>
            </Hub.Background>
            <HubSection Header="indices" Width="500" ContentTemplate="{StaticResource DataTemplate1}" x:Name="indicesSection"/>
            <HubSection Header="market movers" Width="530" ContentTemplate="{StaticResource DataTemplate4}"/>
            <HubSection Header="commodities" Width="500" ContentTemplate="{StaticResource DataTemplate6}"/>
            <HubSection Header="currency" Width="500" ContentTemplate="{StaticResource DataTemplate8}"/>

        </Hub>

以下是我的 ViewModel 代码:

public class ApplicationHubViewModel : ViewModelBase
{
 private RelayCommand<object> _signIn;

    /// <summary>
    /// Gets the IndicesTap.
    /// </summary>
    public RelayCommand<object> SignIn
    { 
        get
        {
            return _signIn
                ?? (_signIn = new RelayCommand<object>((t) => SignInProcess(t)));
        }
    }

private void SignInProcess(Object t)
    {
        IsPopUpOpen = true;
        IsHubControlEnabled = false;
    }

} 

谁能告诉我为什么我不能调用按钮的命令? 是因为我使用的是 MVVM light toolkit 5.2.0。因为通常在简单的 WPF 应用程序中我可以毫无问题地调用命令。

这应该让你继续。

 Command="{Binding SignIn,RelativeSource={RelativeSource   FindAncestor,AncestorType={x:Type Hub}}}

在 Datatemplete 按钮中应该有以下命令绑定代码:

<DataTemplate x:Key="DataTemplate10">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="700"/>
                    <ColumnDefinition Width="800"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <TextBlock Text="user trading terminal"
                           Width="Auto"
                           Height="70"
                           Grid.Column="0"/>
                <Button Content="sign in" Grid.Column="1"
                        Width="Auto"
                        HorizontalAlignment="Right" Command="{Binding Tag.SignIn, ElementName=mainContainer}"/>
            </Grid>
        </DataTemplate>

元素名称应该是顶级元素的名称。在我的例子中,我将 ContentControl 作为集线器上方的顶级元素。

        <Hub Header="user trading terminal" HeaderTemplate="{StaticResource DataTemplate10}">
            <Hub.Background>
                <ImageBrush Stretch="Fill" ImageSource="ms-appx:///Assets/HubImages/BackGround.jpg"/>
            </Hub.Background>
            <HubSection Header="indices" Width="500" ContentTemplate="{StaticResource DataTemplate1}" x:Name="indicesSection"/>
            <HubSection Header="market movers" Width="530" ContentTemplate="{StaticResource DataTemplate4}"/>
            <HubSection Header="commodities" Width="500" ContentTemplate="{StaticResource DataTemplate6}"/>
            <HubSection Header="currency" Width="500" ContentTemplate="{StaticResource DataTemplate8}"/>

        </Hub>

    </ContentControl> 

基本上标签 属性 在绑定时起着重要作用。