2017-12-11 6 views
-1

입력 페이지를 만들고 있는데 리셋 버튼을 구현하려고합니다. 버튼을 클릭하면 UI가 다시 비어 있어야합니다.텍스트 상자 지우기

빈 문자열을 입력하면이 문제를 해결할 수 있다고 생각했습니다. 코드에서 작동하는 것으로 보이고 값은 ""로 변경되지만 UI에서는 입력 된 텍스트가 계속 표시되므로 빈 문자열이 표시되지 않습니다. 나는 또한 here에 제안 된 string.Empty로 시도했지만 그 또한 작동하지 않는 것 같습니다.

여기에 뭔가가 있습니까? 너무 무서운 게 아니라면, 너무 열심히 웃지 마세요.)

MVVM 패턴과 Fody Weaver를 사용하여 코드의 일부가 변경된 부분을 처리하고 있습니다.

UI를/XAML은

<TextBlock Text="Naam:" 
      Grid.Column="0" 
      Style="{StaticResource InputInputBlock}" 
      /> 

<TextBox Foreground="White" 
     Grid.Column="1" 
     Text="{Binding Name, Mode=TwoWay}" 
     Style="{StaticResource InputInputBox}" 
     /> 

<Button Content="Reset" 
      Height="50" 
      Width="150" 
      Grid.Column="0" 
      Grid.Row="2" 
      VerticalAlignment="Top" 
      HorizontalAlignment="Center" 
      Style="{StaticResource FlatButton}" 
      Command="{Binding ResetCommand}" 
      /> 

뷰 모델

private string _name; 
public string Name 
     { 
      get => _name; 
      set 
      { 
       _name = value; 
      } 
     } 
public AddStakeholderViewModel() 
     { 
      ResetCommand = new RelayCommand(() => ResetForm()); 
     } 

private void ResetForm() 
     { 
      Name = " "; 
     } 
+0

은 String.Empty로 사용해보십시오. 이상적으로 txtBoxControl.Clear()는 트릭을해야합니다. - https://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.clear(v=vs.110).aspx) –

+3

Name setter에 알림이없고 UI에 ' 명령을 호출 한 후 뷰 모델에서 변경 사항을 확인하십시오. INotifyPropertyChanged를 구현하고 setter – ASh

+0

@PrateekShrivastava에서 이벤트를 발생 시키십시오. String.Empty를 시도했지만 아무 것도하지 않는 것 같습니다. txtBoxControl.Clear()는 MVVM 패턴에서 사용할 수 없습니다. 그렇다면 더 자세히 설명해 주시겠습니까? –

답변

1

당신은 당신의 클래스에서 INotifyPropertyChanged 인터페이스를 구현할 수 있습니다. 이것은 나를 위해 작동 :

public class Person : INotifyPropertyChanged 
    { 
     private string _name; 
     public string Name 
     { 
      get { return _name; } 
      set 
      { 
       _name = value; 
       // Call OnPropertyChanged whenever the property is updated 
       OnPropertyChanged("Name"); 
      } 
     } 

     // Declare the event 
     public event PropertyChangedEventHandler PropertyChanged; 

     // Create the OnPropertyChanged method to raise the event 
     protected void OnPropertyChanged(string name) 
     { 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 
     } 
    } 

XAML :

<TextBox Foreground="White" 
    Grid.Column="1" 
    Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
    Style="{StaticResource InputInputBox}" 
    /> 

MainWindow를 :

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = newPerson; 
    } 
    Person newPerson = new Person(); 
    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     newPerson.Name = ""; 
    } 
}