텍스트 상자 값이 변경되면 추가 단추를 사용할 수있게 구현하려고합니다.양방향 바인딩 문제 - PropertyChanged & CanExecuteChanged
나는 뷰 모델에 텍스트 상자를 바인딩 :
<TextBox Name="nameTbx" Text="{Binding Path=NewNode.Name, Mode=TwoWay}" />
내 버튼 :
<Button Content="Add" Command="{Binding Path=AddNewNodeProperty}"/>
을 XAML 코드에서 난 내 뷰 모델에 DataContext를 설정 뒤에.
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();
}
}
그리고 마지막으로 내 노드 클래스 :
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>();
}
내가 _addNewNodeProperty 여기
this._addNewNodeProperty = new AddNode(this);
내 ADDNODE 클래스를 초기화 생성자에서
/* 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;
}
}
: 같은 뷰 모델 본다
프로 블 림은 텍스트 상자 텍스트를 변경할 때 NewNode가 값을 받고 있지만 설정해야한다는 것입니다.
고급 Tnx!
편집 내가 뭔가를 추가하자 :
나는 또한 화면에 데이터 그리드 및 선택 항목이 변경 될 때, 내 추가 사용할 수있게 butom 있습니다.
선택 항목 :
<DataGrid Name="nodeDataGrid" ItemsSource="{Binding Path=MyServiceMap.Nodes}"
Background="Silver" Margin="0,34,10,10" IsReadOnly="True" SelectedItem="{Binding Path=SelectedNode}" >
그리고 VM :
private Node _selectedNode = new Node();
public Node SelectedNode
{
get
{
return _selectedNode;
}
set
{
_selectedNode = value;
OnPropertyChanged("SelectedNode");
}
}
무엇을 제안합니까? :) – Bip
몇 가지 구체적인 제안을 제공하기 위해 내 대답이 업데이트되었습니다. –