Bindowanie zdarzeń wzorzec MVVM

0

Jak mogę sobie zbindować, zdarzenia dla danego textboxa. Bo w xamlu

 PreviewTextInput="{Binding TextValidate}"

Tak to nie działa i się już z tym męczę dłuższy czas. Próbowałem też przez konstruktor przekazać Textboxa

        public LibraryViewModel(TextBox tb)
        { 
            tb = new TextBox();
            YearBox = new TextBox();

            YearBox = tb;
            SetValidation();
            _business = new Business();
            BooksCollection = new ObservableCollection<Book>(_business.GetBooks());
            RentCollection = new ObservableCollection<Rent>(_business.GetRents());
        }

i potem wywoałać w nim funkcję

        private void SetValidation()
        {

            this.YearBox.PreviewTextInput += (sender, args) =>
            {
                var regex = new Regex("[^0-9]+");
                args.Handled = regex.IsMatch(args.Text);
                OnPropertyChanged();
            };


        }

ale tak też nie przeszło

2

To co tworzysz nie jest po MVVMowemu, zbinduj sobie tego Twojego textboxa którego chcesz validować do jakiegoś propertisa stringowego, binding z parameterm UpdateSourceTrigger=PropertyChanged, no i w seterze dokonaj sprawdzenia czy chcesz dopuścić dany tekst czy nie.

  <TextBox Text="{Binding Foo, UpdateSourceTrigger=PropertyChanged}" />
  public string Foo
        {
            get
            {
                return m;
            }
            set
            {
                var regex = new Regex("[^0-9]+");
                if (!regex.IsMatch(value))
                {
                    m = value; 
                }


                OnPropertyChanged();
            }
        }

A tak w ogóle to powinno się utworzyć jeden obiekt regexu razem z VM, a nie tworzyć go przy każdym wywołaniu ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1