質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

3187閲覧

C# WPF リストボックスの要素を別のリストボックスへバインド

tomiieee

総合スコア27

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2020/08/14 14:52

編集2020/08/15 06:34

概要

C# WPF 初心者です。
用語の誤用/的外れな質問ありましたらご容赦ください。

データバインディングを勉強しています。
リストボックス→別のリストボックスへのバインド方法をご教示願います。

質問事項_詳細

[表題]と[Memo]の要素を入力して追加ボタンを押すと、左側のリストボックスに入力内容が追加されます。
左側のリストボックスは[表題]のみ表示します。

下記画像のようにリストを選択すると、右側のリストボックスに
選択した項目の[表題]と[要素]が表示されるような仕組みにしたいです。

■画像の例
[表題]:ABC , [Memo]:DEF と入力した場合、右側のリストボックスに
ABC
DEF
と表示されるようにしたい。

![イメージ説明

以下3点ご教示願います。

  • リストボックスの選択されている項目を取得する方法
  • 取得した項目をバインドする方法
  • そもそも右側はリストボックスではなく、他のコントロールを使用した方が良いのか

※また、ソースコードに改善点ありましたらご指摘願います。

該当のソースコード

XAML

1<Window x:Class="リストボックスSample.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 prism:ViewModelLocator.AutoWireViewModel="True" 6 xmlns:l="clr-namespace:リストボックスSample.ViewModels" 7 Title="{Binding Title}" Height="350" Width="525" > 8 9 <Window.DataContext> 10 <l:MainWindowViewModel /> 11 </Window.DataContext> 12 13 <Grid> 14 <Grid.ColumnDefinitions> 15 <ColumnDefinition/> 16 <ColumnDefinition Width="5"/> 17 <ColumnDefinition Width="2*"/> 18 </Grid.ColumnDefinitions> 19 <Grid.RowDefinitions> 20 <RowDefinition Height="Auto"/> 21 <RowDefinition Height="5"/> 22 <RowDefinition Height="12*"/> 23 </Grid.RowDefinitions> 24 <TextBox x:Name="txt_Title" Grid.Column="0" Margin="43,5,10,4" Text="{Binding Txt_Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap"/> 25 <TextBox x:Name="txt_Memo" Grid.Column="2" Margin="66,5,122,5" Text="{Binding Txt_Memo,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextWrapping="Wrap"/> 26 <Label x:Name="lbl_Title" Grid.Row="0" Grid.Column="0" Content="表題" HorizontalAlignment="Left" Margin="10,9,0,8" Width="35"/> 27 <Label x:Name="lbl_Memo" Grid.Row="0" Grid.Column="2" Content="Memo" Margin="5,10,286,6"/> 28 <Button Content="追加" Command="{Binding ExecuteCommand}" Grid.Column="2" Margin="0,9,10,10" HorizontalAlignment="Right" Width="56"/> 29 30 <!--タスク一覧--> 31 <ListBox x:Name="lst_Title" ItemsSource="{Binding Path=TaskList}" DisplayMemberPath="Title" IsSynchronizedWithCurrentItem="True" Margin="10,5,10,15" Grid.Row="2"/> 32 33 <!--詳細表示--> 34 <ListBox x:Name="lst_Detail" Grid.Column="2" Grid.Row="2" Margin="5,5,16,15"> 35 <ListBox.ItemTemplate> 36 <DataTemplate> 37 <StackPanel> 38             <!--該当部分(ここにTitleとMemoの要素を出力したい)--> 39 <TextBlock Text="" FontWeight="Bold"/> 40 <TextBlock Text=""/> 41 </StackPanel> 42 </DataTemplate> 43 </ListBox.ItemTemplate> 44 </ListBox> 45 46 </Grid> 47</Window> 48

C#

1// 2//ViewModel 3// 4 5using Prism.Mvvm; 6using Prism.Commands; 7using リストボックスSample.Views; 8using System.Windows.Documents; 9using System; 10using System.Collections.Generic; 11using System.Collections.ObjectModel; 12 13namespace リストボックスSample.ViewModels 14{ 15 public class MainWindowViewModel : BindableBase 16 { 17 private string txt_Title; 18 public string Txt_Title 19 { 20 get { return this.txt_Title; } 21 set 22 { 23 if(this.SetProperty(ref this.txt_Title, value)) 24 this.ExecuteCommand.RaiseCanExecuteChanged(); 25 } 26 } 27 28 private string txt_Memo; 29 public string Txt_Memo 30 { 31 get { return this.txt_Memo; } 32 set 33 { 34 if(this.SetProperty(ref this.txt_Memo, value)) 35 this.ExecuteCommand.RaiseCanExecuteChanged(); 36 } 37 } 38 39 public ObservableCollection<Task> TaskList { get; set; } 40 41 public DelegateCommand ExecuteCommand { get; private set; } 42 43 public MainWindowViewModel() 44 { 45 this.TaskList = new ObservableCollection<Task>(); 46 47 this.ExecuteCommand = new DelegateCommand(this.Execute, this.CanExecute); 48 } 49 50 //実行コマンド 51 private void Execute() 52 { 53 this.TaskList.Add(new Task { Title = Txt_Title, Detail = Txt_Memo }); 54 55 Txt_Title = ""; 56 Txt_Memo = ""; 57 58 this.ExecuteCommand.RaiseCanExecuteChanged(); 59 } 60 61 //コマンド条件式 62 private bool CanExecute() 63 { 64 if(string.IsNullOrEmpty(Txt_Title)) 65 { 66 return false; 67 } 68 return true; 69 } 70 71 } 72}

C#

1// 2//Model 3// 4 5using System; 6using System.Collections.Generic; 7using System.Text; 8 9namespace リストボックスSample.Views 10{ 11 public class Task 12 { 13 public string Title { get; set; } 14 public string Detail { get; set; } 15 } 16}
TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

選択されているというのが重要な情報の場合(ファイルに選択情報も保存して次回復元する等)は、別の手のほうがいいかもしれません。

Taskクラスにbool IsSelectedプロパティを用意して、lst_TitleではListBoxItemのIsSelectedにバインドし、lst_DetailではListBoxItemのVisibilityにバインドします。
どちらのListBoxもTaskListがソースですが、lst_Detailでは未選択のものは無いように見えます。
ちょっとずるいようですが、割とポピュラーな手段だと思います。もし気になるようでしたら追記しますので言ってください。

1万字に収まらなかったのでこちらで失礼します。

xml

1<Window 2 x:Class="Questions284783.Views.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:controls="clr-namespace:System.Windows.Controls;assembly=PresentationFramework" 6 xmlns:prism="http://prismlibrary.com/" 7 Width="525" 8 Height="350" 9 prism:ViewModelLocator.AutoWireViewModel="True"> 10 <Window.Resources> 11 <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 12 </Window.Resources> 13 <Grid> 14 <Grid.ColumnDefinitions> 15 <ColumnDefinition /> 16 <ColumnDefinition Width="2*" /> 17 </Grid.ColumnDefinitions> 18 <Grid.RowDefinitions> 19 <RowDefinition Height="Auto" /> 20 <RowDefinition /> 21 </Grid.RowDefinitions> 22 <Grid> 23 <Grid.ColumnDefinitions> 24 <ColumnDefinition Width="Auto" /> 25 <ColumnDefinition /> 26 </Grid.ColumnDefinitions> 27 <Label 28 Margin="5" 29 VerticalAlignment="Center" 30 Content="表題" /> 31 <TextBox 32 Grid.Column="1" 33 Margin="5" 34 VerticalAlignment="Center" 35 Text="{Binding Txt_Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 36 TextWrapping="Wrap" /> 37 </Grid> 38 <Grid Grid.Column="1"> 39 <Grid.ColumnDefinitions> 40 <ColumnDefinition Width="Auto" /> 41 <ColumnDefinition /> 42 <ColumnDefinition Width="Auto" /> 43 </Grid.ColumnDefinitions> 44 <Label 45 Margin="5" 46 VerticalAlignment="Center" 47 Content="Memo" /> 48 <TextBox 49 Grid.Column="1" 50 Margin="5" 51 VerticalAlignment="Center" 52 Text="{Binding Txt_Memo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 53 TextWrapping="Wrap" /> 54 <Button 55 Grid.Column="2" 56 MinWidth="56" 57 Margin="5" 58 Command="{Binding ExecuteCommand}" 59 Content="追加" /> 60 </Grid> 61 <Grid Grid.Row="1"> 62 <Grid.RowDefinitions> 63 <RowDefinition Height="Auto" /> 64 <RowDefinition /> 65 </Grid.RowDefinitions> 66 <ComboBox 67 x:Name="comboBox" 68 Margin="5" 69 SelectedIndex="0"> 70 <controls:SelectionMode>Single</controls:SelectionMode> 71 <controls:SelectionMode>Multiple</controls:SelectionMode> 72 <controls:SelectionMode>Extended</controls:SelectionMode> 73 </ComboBox> 74 <ListBox 75 x:Name="lst_Title" 76 Grid.Row="1" 77 Margin="5" 78 DisplayMemberPath="Title" 79 IsSynchronizedWithCurrentItem="True" 80 ItemsSource="{Binding TaskList}" 81 SelectionMode="{Binding SelectedValue, ElementName=comboBox}"> 82 <ListBox.ItemContainerStyle> 83 <Style TargetType="ListBoxItem"> 84 <Setter Property="IsSelected" Value="{Binding IsSelected}" /> 85 </Style> 86 </ListBox.ItemContainerStyle> 87 </ListBox> 88 </Grid> 89 <ListBox 90 Grid.Row="1" 91 Grid.Column="1" 92 Margin="5" 93 ItemsSource="{Binding TaskList}"> 94 <ListBox.ItemContainerStyle> 95 <Style TargetType="ListBoxItem"> 96 <Setter Property="Visibility" Value="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}" /> 97 </Style> 98 </ListBox.ItemContainerStyle> 99 <ListBox.ItemTemplate> 100 <DataTemplate> 101 <StackPanel> 102 <TextBlock FontWeight="Bold" Text="{Binding Title}" /> 103 <TextBlock Text="{Binding Detail}" /> 104 </StackPanel> 105 </DataTemplate> 106 </ListBox.ItemTemplate> 107 </ListBox> 108 </Grid> 109</Window>

cs

1using System.Collections.ObjectModel; 2using Prism.Commands; 3using Prism.Mvvm; 4 5namespace Questions284783.ViewModels 6{ 7 public class MainWindowViewModel : BindableBase 8 { 9 private string txt_Title; 10 public string Txt_Title 11 { 12 get => txt_Title; 13 set { if(SetProperty(ref txt_Title, value)) ExecuteCommand.RaiseCanExecuteChanged(); } 14 } 15 16 private string txt_Memo; 17 public string Txt_Memo 18 { 19 get => txt_Memo; 20 set { if(SetProperty(ref txt_Memo, value)) ExecuteCommand.RaiseCanExecuteChanged(); } 21 } 22 23 public ObservableCollection<Task> TaskList { get; } = new ObservableCollection<Task>(); 24 public DelegateCommand ExecuteCommand { get; private set; } 25 26 public MainWindowViewModel() 27 { 28 TaskList.Add(new Task { Title = "aaa", Detail = "111" }); 29 TaskList.Add(new Task { Title = "bbb", Detail = "222" }); 30 TaskList.Add(new Task { Title = "ccc", Detail = "333" }); 31 ExecuteCommand = new DelegateCommand(Execute, CanExecute); 32 } 33 34 private void Execute() 35 { 36 TaskList.Add(new Task { Title = Txt_Title, Detail = Txt_Memo }); 37 Txt_Title = ""; 38 Txt_Memo = ""; 39 ExecuteCommand.RaiseCanExecuteChanged(); 40 } 41 42 private bool CanExecute() => !string.IsNullOrEmpty(Txt_Title); 43 } 44 45 public class Task : BindableBase 46 { 47 public string Title { get; set; } 48 public string Detail { get; set; } 49 50 private bool isSelected; 51 public bool IsSelected { get => isSelected; set => SetProperty(ref isSelected, value); } 52 } 53}

投稿2020/08/15 07:48

編集2023/07/23 04:01
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

単独選択か複数選択かで変わってきます。
見てもらったほうが早いので、それぞれ向き用の2つの表示法を用意しました。
SelectionModeをコンボボックスで切り替えられるようになっています。違いを確認してください。

xml

1<Window 2 x:Class="Questions284783.Views.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:controls="clr-namespace:System.Windows.Controls;assembly=PresentationFramework" 6 xmlns:prism="http://prismlibrary.com/" 7 xmlns:sys="clr-namespace:System;assembly=mscorlib" 8 Width="525" 9 Height="350" 10 prism:ViewModelLocator.AutoWireViewModel="True"> 11 12 <!-- prism:ViewModelLocator.AutoWireViewModel="True" があるからいらないはず --> 13 <!--<Window.DataContext> 14 <l:MainWindowViewModel /> 15 </Window.DataContext>--> 16 17 <Window.Resources> 18 <!-- SelectionMode選択用データ(本題には無関係 違いを確認しやすいように) --> 19 <ObjectDataProvider 20 x:Key="selectionMode" 21 MethodName="GetValues" 22 ObjectType="{x:Type sys:Enum}"> 23 <ObjectDataProvider.MethodParameters> 24 <x:Type TypeName="controls:SelectionMode" /> 25 </ObjectDataProvider.MethodParameters> 26 </ObjectDataProvider> 27 </Window.Resources> 28 29 <Grid> 30 <Grid.ColumnDefinitions> 31 <ColumnDefinition /> 32 <ColumnDefinition Width="2*" /> 33 </Grid.ColumnDefinitions> 34 <Grid.RowDefinitions> 35 <RowDefinition Height="Auto" /> 36 <RowDefinition /> 37 </Grid.RowDefinitions> 38 39 <Grid> 40 <Grid.ColumnDefinitions> 41 <ColumnDefinition Width="Auto" /> 42 <ColumnDefinition /> 43 </Grid.ColumnDefinitions> 44 <Label 45 Margin="5" 46 VerticalAlignment="Center" 47 Content="表題" /> 48 <TextBox 49 Grid.Column="1" 50 Margin="5" 51 VerticalAlignment="Center" 52 Text="{Binding Txt_Title, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 53 TextWrapping="Wrap" /> 54 </Grid> 55 56 <Grid Grid.Column="1"> 57 <Grid.ColumnDefinitions> 58 <ColumnDefinition Width="Auto" /> 59 <ColumnDefinition /> 60 <ColumnDefinition Width="Auto" /> 61 </Grid.ColumnDefinitions> 62 <Label 63 Margin="5" 64 VerticalAlignment="Center" 65 Content="Memo" /> 66 <TextBox 67 Grid.Column="1" 68 Margin="5" 69 VerticalAlignment="Center" 70 Text="{Binding Txt_Memo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 71 TextWrapping="Wrap" /> 72 <Button 73 Grid.Column="2" 74 MinWidth="56" 75 Margin="5" 76 Command="{Binding ExecuteCommand}" 77 Content="追加" /> 78 </Grid> 79 80 <Grid Grid.Row="1"> 81 <Grid.RowDefinitions> 82 <RowDefinition Height="Auto" /> 83 <RowDefinition /> 84 </Grid.RowDefinitions> 85 86 <!-- SelectionMode選択 --> 87 <ComboBox 88 x:Name="comboBox" 89 Margin="5" 90 ItemsSource="{Binding Source={StaticResource selectionMode}}" 91 SelectedIndex="0" /> 92 <ListBox 93 x:Name="lst_Title" 94 Grid.Row="1" 95 Margin="5" 96 DisplayMemberPath="Title" 97 IsSynchronizedWithCurrentItem="True" 98 ItemsSource="{Binding TaskList}" 99 SelectionMode="{Binding SelectedValue, ElementName=comboBox}" /> 100 </Grid> 101 102 <Grid Grid.Row="1" Grid.Column="1"> 103 <Grid.RowDefinitions> 104 <RowDefinition /> 105 <RowDefinition Height="Auto" /> 106 </Grid.RowDefinitions> 107 108 <!-- SelectedItems をもらう --> 109 <ListBox Margin="5" ItemsSource="{Binding SelectedItems, ElementName=lst_Title}"> 110 <ListBox.ItemTemplate> 111 <DataTemplate> 112 <StackPanel> 113 <TextBlock FontWeight="Bold" Text="{Binding Title}" /> 114 <TextBlock Text="{Binding Detail}" /> 115 </StackPanel> 116 </DataTemplate> 117 </ListBox.ItemTemplate> 118 </ListBox> 119 120 <!-- lst_Title が SelectionMode="Single" ならこれもあり --> 121 <StackPanel Grid.Row="1"> 122 <TextBlock 123 Margin="5" 124 FontWeight="Bold" 125 Text="{Binding TaskList/Title}" /> 126 <TextBlock Margin="5" Text="{Binding TaskList/Detail}" /> 127 </StackPanel> 128 </Grid> 129 </Grid> 130</Window>

cs

1using System.Collections.ObjectModel; 2using Prism.Commands; 3using Prism.Mvvm; 4 5namespace Questions284783.ViewModels 6{ 7 public class MainWindowViewModel : BindableBase 8 { 9 private string txt_Title; 10 public string Txt_Title 11 { 12 get => txt_Title; 13 set 14 { 15 if(SetProperty(ref txt_Title, value)) 16 ExecuteCommand.RaiseCanExecuteChanged(); 17 } 18 } 19 20 private string txt_Memo; 21 public string Txt_Memo 22 { 23 get => txt_Memo; 24 set 25 { 26 if(SetProperty(ref txt_Memo, value)) 27 ExecuteCommand.RaiseCanExecuteChanged(); 28 } 29 } 30 31 public ObservableCollection<Task> TaskList { get; } = new ObservableCollection<Task>(); 32 33 public DelegateCommand ExecuteCommand { get; private set; } 34 35 public MainWindowViewModel() 36 { 37 // 検証時面倒なので先入れ^^; 38 TaskList.Add(new Task { Title = "aaa", Detail = "111" }); 39 TaskList.Add(new Task { Title = "bbb", Detail = "222" }); 40 TaskList.Add(new Task { Title = "ccc", Detail = "333" }); 41 42 ExecuteCommand = new DelegateCommand(Execute, CanExecute); 43 } 44 45 private void Execute() 46 { 47 TaskList.Add(new Task { Title = Txt_Title, Detail = Txt_Memo }); 48 49 Txt_Title = ""; 50 Txt_Memo = ""; 51 52 ExecuteCommand.RaiseCanExecuteChanged(); 53 } 54 55 private bool CanExecute() => !string.IsNullOrEmpty(Txt_Title); 56 } 57 58 public class Task 59 { 60 public string Title { get; set; } 61 public string Detail { get; set; } 62 } 63}

バインディング中のスラッシュ{Binding TaskList/Title}については↓あたりを参照してください(説明放棄^^;
方法: 階層データでマスター詳細パターンを使用する - WPF | Microsoft Docs
WPF4.5入門 その56「コレクションのバインディング」 - かずきのBlog@hatena 最後のほうの「現在の選択項目をバインディングする方法」


ここまではViewだけでの対応ですが、選択されているというのが重要な情報の場合(ファイルに選択情報も保存して次回復元する等)は、別の手のほうがいいかもしれません。

Taskクラスにbool IsSelectedプロパティを用意して、lst_TitleではListBoxItemIsSelectedにバインドし、lst_DetailではListBoxItemVisibilityにバインドします。
どちらのListBoxTaskListがソースですが、lst_Detailでは未選択のものは無いように見えます。
ちょっとずるいようですが、割とポピュラーな手段だと思います。もし気になるようでしたら追記しますので言ってください。


ソースコードに改善点ありましたらご指摘願います。

prism:ViewModelLocator.AutoWireViewModel="True"があるので<l:MainWindowViewModel />で入れる必要はないはずです。

ぐちゃぐちゃMarginMargin="66,5,122,5"のようなもの)はよろしくないです(Margin="5"Margin="5,2"のようなすっきりしたものならOKです)
ユーザーのフォント設定やウィンドウのリサイズ等で、文字が見切れたりレイアウト崩れの原因になります。
はっきり言って面倒なのですが、入れ子Grid等で地道にレイアウトしてください。

Width="56"もフォントによっては見切れるので、MinWidth="56"にしておくと安心です。

C#コードは特にないです^^
ReactivePropertyを使えば、プロパティのごちゃっとしたところを緩和できそうです。

投稿2020/08/14 21:11

編集2023/07/23 04:03
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomiieee

2020/08/15 15:00 編集

※長いので、別の質問として投稿したほうが良い場合はお申し付けください。 >もし気になるようでしたら追記しますので言ってください。 文章だけでは理解できなかったので、お手数おかけしますがコードいただけますでしょうか。 SelectionModeをコンボボックスで切り替えられるように設定していただき、ありがとうございます。 本題とは逸れますが、リソース設定の部分から質問いたします。 今回のリソース設定は、「SelectionModeをGetValuesメソッドでバインドし、列挙型に格納したものを、コンボボックスがリソースとして使用している。」 という理解で合っていますでしょうか? ただ、それぞれのタグやその属性で何を実行/設定しているのかが、あまり理解できませんでした。 (ググっても理解できませんでした・・・) 以下の理解で合っていますでしょうか? ・<ObjectDataProvider>・・・メソッドにバインドする  ・x:key・・・リソースに必要なキー(値は任意)  ・MethodName=バインドするメソッド  ・ObjectType="{x:Type sys:Enum}" ・・・値を格納する型を指定? "sys"とは何でしょうか? ・<ObjectDataProvider.MethodParameters>・・・メソッドに渡すパラメータ  ↓ここが一番分かりませんでした。↓  ・<x:Type TypeName=○○・・・型を指定している? "controls:SelectionMode"は 0,1,2の値なのでは???  パラメータを指定しているのは分かりますが、  https://docs.microsoft.com/ja-jp/dotnet/framework/wpf/data/how-to-bind-to-a-method を見ると、  「system:○○」だったり「local:○○」だったり、タグが違うのもよく分かりません。 また、https://docs.microsoft.com/ja-jp/dotnet/framework/wpf/data/how-to-bind-to-a-method を見ると BindsDirectlyToSourceを"true"にしていますが、今回はコンボボックスでBindsDirectlyToSourceを"true"にしていないのはなぜでしょうか?
TN8001

2020/08/15 07:18

ObjectDataProviderはかなりマニアックな機能なのでそんなに気にする必要はないですが^^; C#コードで言うと var selectionMode = Enum.GetValues(typeof(SelectionMode)); ってのをxamlでやってる感じです。 意味的には SelectionMode[] selectionMode = { SelectionMode.Single, SelectionMode.Multiple, SelectionMode.Extended }; って感じでしょうか(これをxamlで書いたほうが短く済みますね。今気が付きました^^; > "sys"とは何でしょうか? xmlns:sys="clr-namespace:System;assembly=mscorlib" のsysです。つまりsys:Enumとは [Enum クラス (System) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.enum のことです。 [Enum.GetValues(Type) メソッド (System) | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.enum.getvalues を呼び出します。 > "controls:SelectionMode"は0,1,2の値なのでは??? 値としては0,1,2ですが、SelectionModeを明示したおかげでコンボボックスに名前が出ます。 > 「system:○○」だったり「local:○○」だったり system:やlocal:の部分は変数名のようなもので好きに付けられます。 xmlns:system="clr-namespace:System;assembly=mscorlib" と書けばsystem:Enumとなります。 > BindsDirectlyToSourceを"true"にしています 私も始めて見ましたが「ObjectDataProvider自体」をバインドしたい場合(MethodParametersが欲しい)と、「メソッドを実行した結果」をバインドしたい場合(SelectionMode[]が欲しい)の違いっぽいですね。 > お手数おかけしますがコードいただけますでしょうか。 準備していなかったのでしばらくお待ちください^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問