2

想象一下,我有一个用户名和密码文本框以及一个提交登录详细信息的按钮。

我有一堂课:

public class LoginCredentials
{
    public string Username { get; set; }
    public string Password { get; set; }
}

我有一个视图模型:

public class MainViewModel : INotifyPropertyChanged
{
    public LoginCredentials LoginCredentials { get; set; }

    public MainViewModel( LoginCredentials loginCredentials )
    {
        // Implement loading from saved credentials if done so
        this.LoginCredentials = new LoginCredentials();
    }

    #region Properties
    public string Username {
        get { return LoginCredentials.Username; }
        set { LoginCredentials.Username = value; }
    }
    public string Password
    {
        get { return LoginCredentials.Password; }
        set { LoginCredentials.Password = value; }
    }
    #endregion

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

我有一些 xaml 与此视图模型的数据绑定:

...DataContext="{Binding MainViewModel}"...     
   <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0">
        <TextBlock HorizontalAlignment="Left" Margin="10,0,0,0" TextWrapping="Wrap" Text="Username" VerticalAlignment="Top"/>
        <TextBox HorizontalAlignment="Left" Height="72" Margin="0,27,0,0" TextWrapping="Wrap" Text="{Binding Username, Mode=TwoWay}" VerticalAlignment="Top" Width="456"/>
        <TextBlock HorizontalAlignment="Left" Margin="10,99,0,0" TextWrapping="Wrap" Text="Password" VerticalAlignment="Top"/>
        <PasswordBox HorizontalAlignment="Left" Height="72" Margin="0,126,0,0" Password="{Binding Password, Mode=TwoWay}" VerticalAlignment="Top" Width="456"/>

        <Button Content="Log in" HorizontalAlignment="Center" Margin="167,203,169,0" VerticalAlignment="Top" />

    </Grid>

最后,我为 xaml 编写的代码:

public partial class MainPage : PhoneApplicationPage
{
    // Constructor

    public MainPage()
    {
        InitializeComponent();
        base.DataContext = new MainViewModel();
    }
}

我在哪里放置更新我在我的视图模型中声明的 LoginCredentials 的点击事件,然后我将其提交给我的 DomainModel(在这种情况下是一个服务层)。

如果我在视图模型中添加一个绑定到函数的单击事件,我无法知道用户名和密码的文本框字段是什么,因为视图模型无法访问 Username.text 类型的方法。

我是否在按钮后面的代码中添加了一些 notifypropertychanged?耶尔普。PS这是我的第一个Windows手机应用程序。

4

1 回答 1

2

我在哪里放置更新我在视图模型中声明的 LoginCredentials 的点击事件,然后我将其提交给我的 DomainModel(在本例中是一个服务层)。

通常,您不会这样做。相反,您将在ICommand中添加一个ViewModel,并将 Button 绑定CommandICommand. 这允许您解耦逻辑并将其完全放在您的 ViewModel 中,并且仍然使用绑定来调用它。

ICommand通常通过某种形式的 DelegateCommand 实现,例如Windows Phone 的这种实现

我不知道用户名和密码的文本框字段是什么,因为视图模型无权访问 Username.text 类型的方法。

这些绑定到 ViewModel 中的属性,因此更改将自动反映在那里。

于 2013-10-05T00:20:41.823 回答