C# 将TextBlock的可见性绑定到TextBox
我正试图根据他们选择的用户名是否可用来绑定C# 将TextBlock的可见性绑定到TextBox,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正试图根据他们选择的用户名是否可用来绑定文本块的可见性。以下是TextBlock的XAML: <TextBlock Grid.Row="5" Text="* Username already taken" Visibility="{Binding UsernameAvailable, Converter={StaticResource BoolToVis}}" Margin="5"/> 它绑定到的属性以及激发的命令是: public bool UsernameAvailabl
文本块的可见性
。以下是TextBlock
的XAML:
<TextBlock Grid.Row="5" Text="* Username already taken" Visibility="{Binding UsernameAvailable, Converter={StaticResource BoolToVis}}" Margin="5"/>
它绑定到的属性以及激发的命令是:
public bool UsernameAvailable { get; set; }
#region RegisterCommand
private DelegateCommand _registerCommand;
public ICommand RegisterCommand
{
get
{
_registerCommand = new DelegateCommand(param => Register());
return _registerCommand;
}
}
private void Register()
{
if (IsPasswordValid())
{
var newUser = new User
{
FirstName = _firstName,
LastName = _lastName,
Username = _userName,
Password = _password //TODO: Hashing of password
};
using (var context = new WorkstreamContext())
{
var users = context.Set<User>();
users.Add(newUser);
context.SaveChanges();
}
}
else
{
UsernameAvailable = true; // TODO: Display TextBlock correctly
MessageBox.Show("Failed"); // TODO: Correctly show messages displaying what is incorrect with details
}
}
public bool IsPasswordValid()
{
return FirstName != string.Empty &&
LastName != string.Empty &&
UserName != string.Empty &&
Password.Any(char.IsUpper);
}
#endregion
public bool usernameavable{get;set;}
#区域注册表命令
专用DelegateCommand_registerCommand;
公共ICommand注册表命令
{
得到
{
_registerCommand=newdelegateCommand(param=>Register());
返回注册表命令;
}
}
私人无效登记册()
{
如果(IsPasswordValid())
{
var newUser=新用户
{
FirstName=_FirstName,
LastName=\u LastName,
用户名=\u用户名,
Password=\u Password//TODO:密码哈希
};
使用(var context=new WorkstreamContext())
{
var users=context.Set();
users.Add(newUser);
SaveChanges();
}
}
其他的
{
UsernameAvailable=true;//TODO:正确显示文本块
MessageBox.Show(“Failed”);//TODO:正确显示消息,显示不正确的内容和详细信息
}
}
公共bool IsPasswordValid()
{
返回FirstName!=string.Empty&&
LastName!=字符串。空&&
用户名!=字符串。空&&
密码.Any(char.IsUpper);
}
#端区
消息框将显示,但是文本块
不会出现。当我检查注册方法中是否已使用用户名时,如何确保显示TextBlock
。您必须阅读INotifyPropertyChanged,实现此接口,然后将UsernameAvailable属性修改为:
private usernameAvailable
public bool UsernameAvailable
{
get
{
return usernameAvailable;
}
set
{
if (usernameAvailable != value)
{
usernameAvailable = value;
OnPropertyChanged(nameof(UsernameAvailable));
}
}
}
您可以找到INotifyPropertyChanged实现示例。您必须阅读有关INotifyPropertyChanged的信息,实现此接口,然后将UsernameAvailable属性修改为:
private usernameAvailable
public bool UsernameAvailable
{
get
{
return usernameAvailable;
}
set
{
if (usernameAvailable != value)
{
usernameAvailable = value;
OnPropertyChanged(nameof(UsernameAvailable));
}
}
}
您可以找到INotifyPropertyChanged实现示例