2017-07-12 7 views
0

TextBlockVisibilityを、自分が選択したユーザー名が使用可能かどうかに基づいてバインドしようとしています。テキストボックスへのTextBlockの可視性のバインド

<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 

メッセージボックスが表示されているが、しかしTextBlockは表示されません。ここTextBlockのXAMLです。 RegisterメソッドでUsernameがすでに使用されているかどうかを確認するときに、TextBlockが表示されるようにするにはどうすればよいですか?

答えて

4

あなたは、INotifyPropertyChangedの読んこのインタフェースを実装し、その後にUsernameAvailableプロパティを変更する必要があります:あなたはINotifyPropertyChangedの実装例を見つけることができます

private usernameAvailable 

public bool UsernameAvailable 
{ 
    get 
    { 
     return usernameAvailable; 
    } 
    set 
    { 
     if (usernameAvailable != value) 
     { 
      usernameAvailable = value; 
      OnPropertyChanged(nameof(UsernameAvailable)); 
     } 
    } 
} 

Here

関連する問題