C# コードを使用した WP7 でのデータ バインディングについて質問があります。
カスタムクラスがあれば、すべてが明確です。Source プロパティをクラス インスタンスに設定し、Path プロパティをそのクラス内のプロパティに設定しています。このように(そして動作します)
Binding binding = new Binding()
{
Source = myclass,
Path = new PropertyPath("myproperty"),
Mode = BindingMode.TwoWay
};
myButton.SetBinding(dp, binding);
では、Boolean 変数や List<> の単一項目などの単純な構造をバインドするにはどうすればよいでしょうか? Path プロパティに何を書き込むか、または何を書き込む必要がありますかSource = myBoolean
? Source = List[5]
(TwoWay バインディングが必要なので、Path プロパティの設定は必須であることに注意してください)
最終的解決:
変数をバインドするには、この変数がパブリック プロパティであり、INotifyPropertyChanged が実装されている必要があります。この目的のために、List を ObservableCollection に置き換えることができます。
残りはすべて nmaait の回答のようになり、コード全体は次のようになります。
public partial class Main : PhoneApplicationPage, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private Boolean _myBoolean { get; set; }
public Boolean myBoolean
{
get { return _myBoolean; }
set { _myBoolean = value; OnPropertyChanged("myBoolean"); }
}
ObservableCollection<Int32> myList { get; set; }
public Main()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(Main_Loaded);
}
protected void OnPropertyChanged(String name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
void Main_Loaded(object sender, RoutedEventArgs e)
{
myBoolean = false;
myList = new ObservableCollection<int>() { 100, 150, 200, 250 };
Binding binding1 = new Binding()
{
Source = this,
Path = new PropertyPath("myBoolean"),
Mode = BindingMode.TwoWay
};
myButton.SetBinding(Button.IsEnabledProperty, binding1);
Binding binding2 = new Binding()
{
Source = myList,
Path = new PropertyPath("[1]"),
Mode = BindingMode.TwoWay
};
myButton.SetBinding(Button.WidthProperty, binding2);
}
private void changeButton_Click(object sender, RoutedEventArgs e)
{
myList[1] +=50;
myBoolean = !myBoolean;
}
}