Я хочу, чтобы при изменении значения текстового поля моя кнопка «Добавить» стала доступной.
Я привязываю текстовое поле с помощью viewModel:
<TextBox Name="nameTbx" Text="{Binding Path=NewNode.Name, Mode=TwoWay}" />
Моя кнопка:
<Button Content="Add" Command="{Binding Path=AddNewNodeProperty}"/>
В коде XAML я установил DataContext для моей ViewModel.ViewModel выглядит следующим образом:
/* code*/
private Node _newNode = new Node();
public Node NewNode
{
get
{
return _newNode;
}
set
{
_newNode = value;
OnPropertyChanged("NewNode");
}
}
private AddNode _addNewNodeProperty;
public AddNode AddNewNodeProperty
{
get
{
return _addNewNodeProperty;
}
}
В конструкторе я инициализирую _addNewNodeProperty
this._addNewNodeProperty = new AddNode(this);
Вот мой класс AddNode:
public class AddNode : ICommand
{
private ServiceMapViewModel viewModel;
public AddNode(ServiceMapViewModel viewModel)
{
this.viewModel = viewModel;
this.viewModel.PropertyChanged += (s, e) =>
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, new EventArgs());
}
};
}
public bool CanExecute(object parameter)
{
bool b = !string.IsNullOrWhiteSpace(this.viewModel.NewNode.Name);
return b;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
this.viewModel.AddNewNode();
}
}
И, наконец, мой класс Node:
public class Node
{
public string Name { get; set; }
public bool? IsChecked { get; set; }
public Group Group { get; set; }
public Category Category { get; set; }
public string Metadata { get; set; }
public List<string> Children = new List<string>();
public List<string> Parents = new List<string>();
}
Проблема в том, что, когда я изменяю текст в текстовом поле, NewNode получает значение для меня, но оно должно быть установлено.
Tnx дополнительно!
РЕДАКТИРОВАТЬ Позвольте мне добавить кое-что:
У меня также есть сетка данных на экране, и когда выбранный элемент изменяется, моя кнопка добавления становится доступной.
Выбранный элемент:
<DataGrid Name="nodeDataGrid" ItemsSource="{Binding Path=MyServiceMap.Nodes}"
Background="Silver" Margin="0,34,10,10" IsReadOnly="True" SelectedItem="{Binding Path=SelectedNode}" >
И ВМ:
private Node _selectedNode = new Node();
public Node SelectedNode
{
get
{
return _selectedNode;
}
set
{
_selectedNode = value;
OnPropertyChanged("SelectedNode");
}
}