命令绑定在适用于 Windows 应用商店应用的 MVVM 轻型工具包 [5.2.0] 中不起作用

本文关键字:应用 工具包 不起作用 轻型 MVVM 适用于 绑定 Windows 命令 | 更新日期: 2023-09-27 18:33:12

首先,我使用MVVM轻量级工具包来构建我的Windows应用商店应用程序。因此,数据上下文将在 ViewModelLocator 中设置。我正在尝试绑定集线器控件标头中的按钮的命令。这是我来自 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>

下面是我在上面的数据模板中调用的中心控件的 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>

以下是我的视图模型的代码:

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 轻量级工具包 5.2.0。因为通常在简单的 WPF 应用程序中,我能够毫无问题地调用命令。

命令绑定在适用于 Windows 应用商店应用的 MVVM 轻型工具包 [5.2.0] 中不起作用

这应该让你继续前进。

 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>
元素

名称应为顶级元素的名称。就我而言,我将内容控件作为集线器上方的顶级元素。

        <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> 

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