Wpf MVVM指示灯命令未启动

Wpf MVVM指示灯命令未启动,wpf,mvvm-light,Wpf,Mvvm Light,我有一个简单的登录表单,我正试图开始工作,但由于某些原因,登录按钮没有调用LoginCommand,我不知道为什么,有人能帮我 以下是表格的代码: <Window x:Class="App.Views.Login" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title=

我有一个简单的登录表单,我正试图开始工作,但由于某些原因,登录按钮没有调用LoginCommand,我不知道为什么,有人能帮我

以下是表格的代码:

<Window x:Class="App.Views.Login"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Login" Height="200" Width="340"
    DataContext="{Binding Login, Source={StaticResource Locator}}" ResizeMode="NoResize">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="10"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="10"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Label Content="Username:" HorizontalAlignment="Right" VerticalAlignment="Top" Grid.Row="1" Grid.Column="1" Padding="0,1,5,0"/>
    <Label Content="Password:" HorizontalAlignment="Right" VerticalAlignment="Top" Padding="0,1,5,0" Grid.Row="3" Grid.Column="1"/>
    <TextBox HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="20" Grid.Row="1" Grid.Column="2" Text="{Binding UserName}"/>
    <PasswordBox x:Name="password" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="20" Grid.Row="3" Grid.Column="2"/>
    <Button Command="{Binding Source=LoginCommand}" CommandParameter="{Binding ElementName=password}" Content="Login" Grid.Row="5" Grid.ColumnSpan="2" Grid.Column="1" HorizontalAlignment="Center" Width="60"/>
</Grid>
</Window>

这是我的登录视图模型:

using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using System;
using System.Net.Http;
using System.Windows.Controls;
using System.Windows.Input;

namespace App.ViewModels
{
public class LoginViewModel : ViewModelBase
{
    public Login LoginModel;

    public ICommand LoginCommand;

    public ICommand RegisterViewCommand;

    public ICommand ExitViewCommand;

    public LoginViewModel()
    {
        LoginModel = new Models.Login();
        LoginCommand = new RelayCommand<object>(p => Login(p));
        RegisterViewCommand = new RelayCommand(() => Register());
        ExitViewCommand = ApplicationCommands.Close;
    }

    public string UserName
    {
        get
        {
            return LoginModel.UserName;
        }
        set
        {
            if(value != LoginModel.UserName)
            {
                LoginModel.UserName = value;
                RaisePropertyChanged("UserName");
            }
        }
    }

    #region Private Helpers

    private void Register()
    {
        throw new NotImplementedException();
    }

    private async void Login(object parameter)
    {
        var passwordBox = parameter as PasswordBox;
        LoginModel.Password = passwordBox.Password;
        LoginModel.RememberMe = true;
        var response = await HttpClientSingleton.Instance.PostAsJsonAsync("http://localhost:52841/Account/ClientLogin", LoginModel);
        bool success;
        if (bool.TryParse(await response.Content.ReadAsStringAsync(), out success))
        {
        }
    }

    #endregion Private Helpers
}
}
使用GalaSoft.MvvmLight;
使用GalaSoft.MvvmLight.Command;
使用制度;
使用System.Net.Http;
使用System.Windows.Controls;
使用System.Windows.Input;
名称空间App.ViewModels
{
公共类LoginViewModel:ViewModelBase
{
公共登录登录模型;
公共ICommand LoginCommand;
公共ICommand注册服务command;
公共ICommand和ExitViewCommand;
公共登录视图模型()
{
LoginModel=newmodels.Login();
LoginCommand=newrelaycommand(p=>Login(p));
RegisterViewCommand=newrelaycommand(()=>Register());
ExitViewCommand=应用程序命令。关闭;
}
公共字符串用户名
{
得到
{
返回LoginModel.UserName;
}
设置
{
if(值!=LoginModel.UserName)
{
LoginModel.UserName=值;
RaisePropertyChanged(“用户名”);
}
}
}
#地区私人助理
私人无效登记册()
{
抛出新的NotImplementedException();
}
私有异步无效登录(对象参数)
{
var passwordBox=参数作为passwordBox;
LoginModel.Password=passwordBox.Password;
LoginModel.RememberMe=true;
var response=wait HttpClientSingleton.Instance.PostAsJsonAsync(“http://localhost:52841/Account/ClientLogin“,LoginModel);
成功;
if(bool.TryParse(wait response.Content.ReadAsStringAsync(),out success))
{
}
}
#终端区域私人助理
}
}

我在Login方法的第一行放置了一个断点,但它实际上从未命中它。我还更改了UserName属性,以返回一个预定义字符串来测试DataContext绑定,UserName文本框显示这个预定义字符串,因此我非常确定表单被正确绑定。有什么建议吗?

我认为您的问题是绑定到公共字段而不是属性

您可以看到可以用作绑定源的类型。这不是其中之一

因此,将命令作为属性公开应该是可行的:

public ICommand LoginCommand { get; private set; }

我认为您的问题是绑定到公共字段而不是属性

您可以看到可以用作绑定源的类型。这不是其中之一

因此,将命令作为属性公开应该是可行的:

public ICommand LoginCommand { get; private set; }

我认为您的问题是绑定到公共字段而不是属性

您可以看到可以用作绑定源的类型。这不是其中之一

因此,将命令作为属性公开应该是可行的:

public ICommand LoginCommand { get; private set; }

我认为您的问题是绑定到公共字段而不是属性

您可以看到可以用作绑定源的类型。这不是其中之一

因此,将命令作为属性公开应该是可行的:

public ICommand LoginCommand { get; private set; }

这是一个很好的建议,所以我将+1你,但它不起作用。然而,在从命令绑定中删除Source=LoginCommand,并且仅使用{binding LoginCommand}之后,它确实可以与属性一起工作,所以谢谢,我将接受这个答案。对,因为{binding KEY}与{binding Path=KEY}相同,不是但不是Source这是一个很好的建议,所以我要+1你,但它不起作用。然而,在从命令绑定中删除Source=LoginCommand,并且仅使用{binding LoginCommand}之后,它确实可以与属性一起工作,所以谢谢,我会接受这个答案。对,因为{binding KEY}与{binding Path=KEY}相同,不是但不是Source这是一个很好的建议,所以我要+1你,但它不起作用。然而,在从命令绑定中删除Source=LoginCommand,并且仅使用{binding LoginCommand}之后,它确实可以与属性一起工作,所以谢谢,我会接受这个答案。对,因为{binding KEY}与{binding Path=KEY}相同,不是但不是Source这是一个很好的建议,所以我要+1你,但它不起作用。然而,在从命令绑定中删除Source=LoginCommand,并且仅使用{binding LoginCommand}之后,它确实可以与属性一起工作,所以谢谢,我会接受这个答案。对,因为{binding KEY}与{binding Path=KEY}相同,不是但不是来源