2
私は、パラメータを持っていてもいなくてもよいプロシージャを備えたモジュラーアプリケーションを開発しています。パラメータは各手続きにロードされ、実行の目標はユーザに必要なすべてのパラメータを入力するように要求し、次に余分な作業を行います。wpfの動的要素への動的双方向バインディング
私はすべてを読み込むことができたし、すべて正常に動作しますが、どのように各パラメータ値の動的バインディングを作成するのか分かりません。
これをテストするためのデモアプリケーションを作成しましたが、それを少しでも手抜きましたが、まだ動作していないようで、何が欠けているのかわかりません。ここで
は、実際のアプリケーションの簡易版であるデモアプリケーションのコードですが、コンセプトはしかしほとんど同じです:
public class TestBinding
{
public List<Val> Values {get;set;}
public TestBinding()
{
Values = new List<Val>();
Values.Add(new Val {Caption = "First", Value = String.Empty});
Values.Add(new Val {Caption = "Second", Value = String.Empty});
Values.Add(new Val {Caption = "Third", Value = String.Empty});
}
}
public class Val
{
public string Caption {get;set;}
public string Value {get;set;}
}
public TestBinding TB {get;set;}
public Window1()
{
InitializeComponent();
TB = new TestBinding();
foreach(var x in TB.Values)
{
var txt = new TextBox() {Height = 25, Width = 150};
var myBinding = new Binding("x.Value"); //???? Not sure about this
myBinding.Source = x.Value;
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(txt, TextBox.TextProperty, myBinding);
SPanel.Children.Add(txt);
}
var btn = new Button() {Height = 20, Width = 150, Content = "Show values"};
btn.Click += new RoutedEventHandler(radioButton1_Click);
SPanel.Children.Add(btn);
}
private void radioButton1_Click(object sender, RoutedEventArgs e)
{
foreach(var x in TB.Values)
{
MessageBox.Show(x.Value);
}
}
作品を魔法のように!説明してくれてありがとう! :) – DethoRhyne
おっと、問題が発生しました!コードから値を変更すると(TB.Values [0] .Value = "ABC")、変更されたままですが、双方向バインディングであってもUI要素に変更が反映されません。 – DethoRhyne
クラスValはINotifyPropertyChangedを実装する必要があります。 Valueプロパティが変更されたときにPropertyChangedイベントを発生させます。 – Clemens