Vaios
Vaios

Reputation: 31

Updating textbox from Button click C#

I have the following textbox

<TextBox Grid.Column="1" 
Grid.Row="1" 
Name="groupAddressBox"
Width ="80" 
Text="{Binding Path=GroupAddress,  Converter={StaticResource groupAddressConverter}}"/>

When I change the text manually, it's all good.

But when I try to do this via a button

private void Test_Click(object sender, RoutedEventArgs e)
{
    groupAddressBox.Text = "0/0/1";
}

Although the text changes, the source is not updated, and when I click on ok, it recognizes the value that was there before the change. I cannot upgrade the source straight away, so I prefer to do this this way.

Is there something that can help me force the source upgrade via this way?

Upvotes: 0

Views: 2911

Answers (1)

Gaurang Dave
Gaurang Dave

Reputation: 4046

Based on your question, I tried to create a Simple Example of MVVM Pattern with very basic functionality. Please do necessary change to XAML and CS file as I took the highlighted code only.

Helper Classes

public abstract class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }
    }



public class CommandHandler : ICommand
    {
        public event EventHandler CanExecuteChanged { add { } remove { } }

        private Action<object> action;
        private bool canExecute;

        public CommandHandler(Action<object> action, bool canExecute)
        {
            this.action = action;
            this.canExecute = canExecute;
        }

        public bool CanExecute(object parameter)
        {
            return canExecute;
        }

        public void Execute(object parameter)
        {
            action(parameter);
        }
    }

ViewModel

public class ViewModel : ViewModelBase
{ 
    private string groupAddress;
    public string GroupAddress
    {
        get
        {
            return groupAddress;
        }

        set
        {
            if(value != groupAddress)
            {
                groupAddress = value;
                OnPropertyChanged("GroupAddress");

            }
        }
    }

    public ViewModel() 
    { 

    } 

    private ICommand clickCommand; 
    public ICommand ClickCommand 
    { 
        get 
        { 
            return clickCommand ?? (clickCommand = new CommandHandler(() => MyAction(), true)); 
        } 
    } 

    public void MyAction() 
    { 
        GroupAddress = "New Group Address"; 
    } 
}

Window Xaml

<TextBox Grid.Column="1" Grid.Row="1" Width ="80" 
        Text="{Binding GroupAddress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

<Button Content="Push" Style="{StaticResource TransparentButtonStyle}"
             Margin="5" Command="{Binding ClickCommand}"/>

Window Xaml cs

ViewModel vm = new ViewModel();

this.DataContext = vm;

Upvotes: 2

Related Questions