【コードメモ】【WPF】 ComboBox で選択されたアイテムのプロパティを TextBox にバインド
↓この記事が気になったのでテスト
WPFのバインディングについて原因はわかるけど納得がいかない話
↓参考記事
コンボ ボックス (ComboBox) で選択された項目を取得する (WPF)
※ Livet WPF4.5 を使用していますが、問題点には関わりがないと思います。
MainWindow.xaml
<Window x:Class="training_ItemsControl.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
xmlns:v="clr-namespace:training_ItemsControl.Views"
xmlns:vm="clr-namespace:training_ItemsControl.ViewModels"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<vm:MainWindowViewModel/>
</Window.DataContext>
<i:Interaction.Triggers>
<!--WindowのContentRenderedイベントのタイミングでViewModelのInitializeメソッドが呼ばれます-->
<i:EventTrigger EventName="ContentRendered">
<l:LivetCallMethodAction MethodTarget="{Binding}" MethodName="Initialize"/>
</i:EventTrigger>
<!--Windowが閉じたタイミングでViewModelのDisposeメソッドが呼ばれます-->
<i:EventTrigger EventName="Closed">
<l:DataContextDisposeAction/>
</i:EventTrigger>
<!--WindowのCloseキャンセル処理に対応する場合は、WindowCloseCancelBehaviorの使用を検討してください-->
</i:Interaction.Triggers>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ComboBox x:Name="ComboBox1"
ItemsSource="{Binding Persons}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
Margin="5" />
<!--ComboBoxのSelectedValuePathにオブジェクトのパスを設定しておくと、
SelectedValueで選択されたオブジェクトの指定パスの値が取得できる
複数選択された場合は先頭のオブジェクトの指定パスの値となる-->
<TextBox Grid.Row="2" Margin="5" Text="{Binding SelectedValue, ElementName=ComboBox1}" />
<!--ComboBoxのSelectedItemには選択されたオブジェクトが取得できる-->
<TextBox Grid.Row="3" Margin="5" Text="{Binding SelectedItem.Name, ElementName=ComboBox1}" />
</Grid>
</Window>
MainWindowViewModel.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Livet;
using Livet.Commands;
using Livet.Messaging;
using Livet.Messaging.IO;
using Livet.EventListeners;
using Livet.Messaging.Windows;
using training_ItemsControl.Models;
namespace training_ItemsControl.ViewModels
{
public class MainWindowViewModel : ViewModel
{
public void Initialize()
{
this.Persons = new ObservableCollection<PersonViewModel>() {
new PersonViewModel() { Id = 1, Name = "新宿 一郎" },
new PersonViewModel() { Id = 2, Name = "初台 次郎" },
new PersonViewModel() { Id = 3, Name = "大手町 三郎" },
new PersonViewModel() { Id = 4, Name = "代田橋 四朗" },
new PersonViewModel() { Id = 5, Name = "赤坂 五郎" },
};
}
#region Persons変更通知プロパティ
private ObservableCollection<PersonViewModel> _Persons;
public ObservableCollection<PersonViewModel> Persons
{
get
{ return _Persons; }
set
{
if (_Persons == value)
return;
_Persons = value;
RaisePropertyChanged();
}
}
#endregion
}
}
PersonViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Livet;
using Livet.Commands;
using Livet.Messaging;
using Livet.Messaging.IO;
using Livet.EventListeners;
using Livet.Messaging.Windows;
using training_ItemsControl.Models;
namespace training_ItemsControl.ViewModels
{
public class PersonViewModel : ViewModel
{
public void Initialize()
{
}
#region Id変更通知プロパティ
private int _Id;
public int Id
{
get
{ return _Id; }
set
{
if (_Id == value)
return;
_Id = value;
RaisePropertyChanged();
}
}
#endregion
#region Name変更通知プロパティ
private string _Name;
public string Name
{
get
{ return _Name; }
set
{
if (_Name == value)
return;
_Name = value;
RaisePropertyChanged();
}
}
#endregion
}
}
Author And Source
この問題について(【コードメモ】【WPF】 ComboBox で選択されたアイテムのプロパティを TextBox にバインド), 我々は、より多くの情報をここで見つけました https://qiita.com/sukobuto/items/ebeb646ba5ecbff4f798著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .