#はじめに
WPF学習中のため自分用に記載していきます。
間違い、不足などありましたらコメントをよろしくお願いします。
#●UpdateSourceTrigger プロパティ
Bindingソースの更新タイミングを決定する。
値 | 内容 |
---|---|
UpdateSource | メソッドを呼び出すときにのみ、ソースを更新する |
LostFocus (Default) | フォーカスが外れたタイミングでソースを更新する |
PropertyChanged | ターゲットのプロパティが変更されるたびに、ソースを即時更新する |
<DockPanel Margin="10" DockPanel.Dock="Bottom">
<Button Command="{Binding AddCommand}" Content="Add" DockPanel.Dock="Right" IsDefault="True" />
<TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
</DockPanel>
private string text;
public string Text
{
get => text;
set
{
if (RaisePropertyChangedIfSet(ref text, value))
{
// コマンドが実行可能かどうかが変化したことを通知する
// TextBoxの値が変更される度、実行される
AddCommand.RaiseCanExecuteChanged();
}
}
}
#●ObservableCollectionを使用したBinding
ObservaleCollectionはINotifyCollectionChangedインターフェースがデフォルトで実装されているため、追加・削除などの変更操作をデータバインディングのターゲットと同期をとることができる。
<DockPanel>
<Button Content="Add" Command="{Binding AddCommand}" DockPanel.Dock="Bottom"/>
<ListBox ItemsSource="{Binding PersonList}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding Name}"/>
<Run Text="{Binding Age}"/>
<Run Text="{Binding Country}"/>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
public class MainWindowViewModel : ViewModel
{
// Personリスト:ObservableCollection
public ObservableCollection<Person> PersonList { get; private set; } = new ObservableCollection<Person>();
// 追加ボタン
private ViewModelCommand addCommand;
public ViewModelCommand AddCommand => addCommand ??= new ViewModelCommand(AddPerson);
// Personの追加
private void AddPerson()
{
PersonList.Add(new Person(){Name="すずき", Age=40, Country="日本" });
}
public MainWindowViewModel()
{
PersonList.Add(new Person() { Name = "マイク", Age = 20, Country = "アメリカ" });
PersonList.Add(new Person() { Name = "たなか", Age = 25, Country = "日本" });
PersonList.Add(new Person() { Name = "リー", Age = 30, Country = "中国" });
}
}
上のソースを実行すると、MainWindowViewModel()で追加している人物がListBoxに表示されている。
追加ボタンを押下すると、AddPerson()が実行され「すずき」がListBoxに追加される。
ObservableCollectionを使用しているので、コレクションの追加、削除などを実行すると画面の表示も更新される。
#・環境
VisualStudio2019
.Net Core3.0
Livet v3.2.1
#・参照
[UpdateSourceTrigger 列挙型]
(https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.data.updatesourcetrigger?view=net-5.0)
WPF4.5入門 その55 「Binding その1」 かずきのBlog@hatena
[UpdateSourceTrigger 列挙型]
(https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.objectmodel.observablecollection-1?view=net-5.0)