Я начинаю изучать wpf с помощью mvvm, практикуя простую программу сложения.Мое приложение работает нормально.
Но при запуске приложения текстовое поле автоматически присваивает значение по умолчанию 0.
Я не хочу, чтобы 0 перед тем, как пользователь вводит какие-либо данные.
view.xaml:
<TextBox Height="28" Margin="112,56,46,0" Text ="{Binding firstargument}" Name="textBox1" VerticalAlignment="Top" />
ViewModel.cs
private string _number1;
public string firstargument
{
get { return _number1; }
set
{
this._number1 = value;
this.OnPropertyChanged("firstargument");
}
}
Мой вопрос заключается в том, чтобы удалить значение 0 в текстовом поле после выполнения?
Отредактировано :
ModelView.cs
class ViewModel : INotifyPropertyChanged
{
public RelayCommand AddNew { get; set; }
private int _number1;
public int firstargument
{
get { return _number1; }
set
{
this._number1 = value;
this.OnPropertyChanged("firstargument");
}
}
private int _number2;
public int secondargument
{
get { return _number2; }
set
{
this._number2 = value;
this.OnPropertyChanged("secondargument");
}
}
private int _number3;
public int _addedargument
{
get { return _number3; }
set
{
_number3 = value;
this.OnPropertyChanged("_addedargument");
}
}
public ViewModel()
{
AddNew = new RelayCommand(o => AddNumbers());
}
private void AddNumbers()
{
//Model instance is created here.
Number p = new Number() { number1 = this._number1, number2 = this._number2 };
var c = p.number1 + p.number2;
_addedargument = c;
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
view.Xaml
<Window x:Class="addition.Window1"
xmlns:vm="clr-namespace:addition.ViewModel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.DataContext>
<vm:ViewModel />
</Window.DataContext>
<Grid>
<Label Height="28" Margin="28,54,0,0" Name="Number1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="48">Number</Label>
<TextBox Height="28" Margin="112,56,46,0" Text ="{Binding Path = firstargument}" Name="textBox1" VerticalAlignment="Top" />
<Label Margin="28,106,0,128" Name="Number2" Width="58" HorizontalAlignment="Left">Number1</Label>
<TextBox Height="28" Margin="112,120,46,120" Text ="{Binding Path = secondargument }" Name="textBox2" />
<Label Height="28" Margin="28,0,0,75" Name="label1" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="58">Number2</Label>
<TextBox Height="23" Margin="112,0,46,68" Name="textBox3" Text="{Binding _addedargument}" VerticalAlignment="Bottom" />
<Button Height="23" HorizontalAlignment="Left" Margin="39,0,0,16" Name="button1" VerticalAlignment="Bottom" Width="75" Command="{Binding AddNew}">Button</Button>
</Grid>
</Window>
Изменить: После реализации решения Walteerlv логика добавления ниже не работает:
class ViewModel : INotifyPropertyChanged
{
int num;
public RelayCommand AddNew { get; set; }
private int? _number1;
public string FirstArgument
{
get { return _number1.ToString();}
set
{
if (int.TryParse(_number1.ToString(), out num ))
{
this._number1 = num;
OnPropertyChanged("FirstArgument");
}
else
{
_number1 = null;
}
}
}
private int? _number2;
public string secondargument
{
get { return _number2.ToString(); }
set
{
if (int.TryParse(_number1.ToString(), out num))
{
this._number2 = num;
this.OnPropertyChanged("secondargument");
}
else
{
_number2 = null;
}
}
}
private int? _number3;
public string _addedargument
{
get { return _number3.ToString(); }
set
{
if (int.TryParse(_number1.ToString(), out num))
{
this._number3 = num;
this.OnPropertyChanged("secondargument");
}
else
{
_number3 = null;
}
}
}
public ViewModel()
{
// The command receives an action on the constructor,
// which is the action to execute when the command is invoked.
AddNew = new RelayCommand(o => AddNumbers());
}
private void AddNumbers()
{
Number p = new Number() { number1 =this._number1.ToString(), number2 = this._number2.ToString() };
MessageBox.Show(this._number1.ToString());
int? c = Int32.Parse(p.number1) + Int32.Parse(p.number2);
_addedargument = c.ToString();
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
Дайте мне знать, если вам нужна дополнительная информация.