テキストボックスの値が変更されたときに[追加]ボタンを使用できるようにするために実装します。双方向バインディングの問題 - PropertyChanged&CanExecuteChanged
私はViewModelにしてテキストボックスをバインド:
<TextBox Name="nameTbx" Text="{Binding Path=NewNode.Name, Mode=TwoWay}" />
マイボタン:私の背後にあるXAMLコードで
<Button Content="Add" Command="{Binding Path=AddNewNodeProperty}"/>
は私のViewModelにのDataContextを設定します。 ViewModelには、次のようになります。私はここ_addNewNodeProperty
this._addNewNodeProperty = new AddNode(this);
を初期化するコンストラクタで
/* 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;
}
}
は、私た。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 in advanced!
EDIT は私が何かを追加してみましょう:
私はまた、画面上のデータグリッドを持っており、選択項目が変更されたとき、私の追加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
いくつかの具体的な提案を提供するために私の答えを更新しました。 –