###発生している問題
WPF初心者です。
コードビハインド以外のクラスのプロパティをシンプルにバインドする方法があれば知りたいです。
サンプルとしてMainWindow.xaml, MainWindow.xaml.cs, Class1.csの3つを作成しています。
MainWindow.xamlのComboboxにはコードビハインドのListをバインドし、TextBlockにはClass1の変数をバインドしたいと思っています。
単純に考えると、以下でいけると思います。
DataContext = this;
TextBlock1.DataContext = class1;
ただし、上記方法ではもしxamlのバインド先が増えると
TextBlock1.DataContext = class1;
TextBlock2.DataContext = class1;
TextBlock3.DataContext = class1;
:
と少しかっこ悪いコードになってしまいます。
シンプルにバインドする方法はありますでしょうか。
また、初歩的な質問になりますが、本ソースコードのようにコードビハインド・別クラスをごちゃまぜでバインドさせるのは良くない実装方法なのでしょうか。
よろしくお願いします。
以下ソースコードです。
(質問用にサンプルを作成したため読みにくいコードになっています。すみません。)
###ソースコード
MainWindow.xaml
<Grid> <Grid.RowDefinitions> <RowDefinition Height="283*"/> <RowDefinition Height="37*"/> </Grid.RowDefinitions> <ComboBox Margin="286,135,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding TestList}"/> <TextBlock HorizontalAlignment="Left" Name="TextBlock1" Margin="111,141,0,0" TextWrapping="Wrap" Text="{Binding val}" VerticalAlignment="Top"/> <Button Content="Button" Margin="261,235,181,0" VerticalAlignment="Top" Width="75" Click="increment"/> <TextBlock HorizontalAlignment="Left" Name="TextBlock2" Margin="151,241,0,0" TextWrapping="Wrap" Text="{Binding val}" VerticalAlignment="Top"/> </Grid>
MainWindow.xaml.cs
public partial class MainWindow : Window { public Class1 class1; public List<string> TestList { get; set; } public MainWindow() { Initdata(); InitializeComponent(); DataContext = this; TextBlock1.DataContext = class1; TextBlock2.DataContext = class1; } private void Initdata() { class1 = new Class1(); TestList = new List<string>() { "a", "b", "c" }; } private void increment(object sender, RoutedEventArgs e) { class1.val += 1; } }
Class1.cs
public class Class1:INotifyPropertyChanged { public Class1() { val = 0; } private int _val; public int val { get { return _val; } set { _val = value; RaisePropertyChanged("val"); } } public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(String propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/19 12:51