Wpf 如何在xaml中将属性添加到窗口

Wpf 如何在xaml中将属性添加到窗口,wpf,mvvm,Wpf,Mvvm,我通过编写一个带有登录功能的litle应用程序来学习MVVM。在视图层中,我有一个带有如下绑定的LoginWindow: <TextBox x:Name="tbxUsername" Grid.Row="0" Grid.Column="1" Width="150" Height="22" Margin="15,10,5,10" Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}" /> <

我通过编写一个带有登录功能的litle应用程序来学习MVVM。在视图层中,我有一个带有如下绑定的LoginWindow:

<TextBox x:Name="tbxUsername" Grid.Row="0" Grid.Column="1" Width="150" Height="22" Margin="15,10,5,10" 
    Text="{Binding Path=Username, UpdateSourceTrigger=PropertyChanged}" />

<PasswordBox View:PasswordHelper.Attach="True" View:PasswordHelper.Password="{Binding Path=Password, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
    x:Name="pwdPassword" Grid.Row="1" Grid.Column="1"  Width="150" Height="22" Margin="15,10,5,10" />
<Window.Authenticated={Binding Path=Authenticated, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, NotifyOnTargetUpdated=True} TargetUpdated="authenticated_TargetUpdated"/>

您必须向窗口类添加DependencyProperty,如下所示:

 public static readonly DependencyProperty AuthenticatedProperty = 
         DependencyProperty.Register( "Authenticated", typeof(bool),
         typeof(YOURWINDOWCLASS), new FrameworkPropertyMetadata(false));

// .NET Property wrapper
public bool Authenticated
{
    get { return (bool)GetValue(AuthenticatedProperty ); }
    set { SetValue(AuthenticatedProperty , value); }
}
然后你就可以绑定了

<Window Authenticated={Binding Path=Authenticated, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, NotifyOnTargetUpdated=True} TargetUpdated="authenticated_TargetUpdated"/>


您可以在视图和视图模型中向我们显示代码吗?您的已验证属性是如何更新的?很抱歉,仍然不理解是什么设置了您的已验证属性,以及为什么要将其绑定到窗口。当您的ViewModel上设置了
Authenticated=true
时,您希望在UI上发生什么?我尝试作为您的lead、propdp、rebuild并键入Authenticated follow“Window”标记,但当我按commbo Ctrl+Space时,什么也没有发生。
private bool _authenticated = false;
public bool Authenticated
{
    get
    {
        return _authenticated;
    }
    set
    {
        if (value == true)
        {
            MessageBox.Show("Logged!");
        }
    }
}

public LoginWindow()
{
    InitializeComponent();
    LoginViewModel myViewModel = (LoginViewModel)this.DataContext;
    myViewModel.PropertyChanged += myViewModel_PropertyChanged;

}

void myViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if (e.PropertyName == "Authenticated")
    {
        Authenticated = ((LoginViewModel)sender).Authenticated;
    }
}
 public static readonly DependencyProperty AuthenticatedProperty = 
         DependencyProperty.Register( "Authenticated", typeof(bool),
         typeof(YOURWINDOWCLASS), new FrameworkPropertyMetadata(false));

// .NET Property wrapper
public bool Authenticated
{
    get { return (bool)GetValue(AuthenticatedProperty ); }
    set { SetValue(AuthenticatedProperty , value); }
}
<Window Authenticated={Binding Path=Authenticated, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, NotifyOnTargetUpdated=True} TargetUpdated="authenticated_TargetUpdated"/>