回答編集履歴
1
見直しキャンペーン中
test
CHANGED
@@ -1,195 +1,98 @@
|
|
1
1
|
> DicValueに変更後の"key"列が入ると思ったのですが設定されません。
|
2
2
|
|
3
|
-
|
4
|
-
|
5
3
|
「XAML バインド エラー」ウィンドウにエラーが出ています。
|
6
|
-
|
4
|
+
```
|
5
|
+
重大度レベル データ コンテキスト バインド パス ターゲット ターゲット型 説明 ファイル 行 プロジェクト
|
6
|
+
エラー KeyValuePair`2 key ComboBox.NoTarget Object 型 KeyValuePair`2 のオブジェクトに key プロパティが見つかりません。 \mainwindow.xaml 13 Questions355574
|
7
|
+
```
|
8
|
+
「XAML バインド エラー」ウィンドウが見つからなければ、「出力」ウィンドウでもいいです。
|
9
|
+
```
|
10
|
+
System.Windows.Data Error: 40 : BindingExpression path error: 'key' property not found on 'object' ''KeyValuePair`2' (HashCode=54645477)'. BindingExpression:Path=key; DataItem='KeyValuePair`2' (HashCode=54645477); target element is 'ComboBox' (Name=''); target property is 'NoTarget' (type 'Object')
|
7
11
|
```
|
8
12
|
|
9
|
-
重大度レベル データ コンテキスト バインド パス ターゲット ターゲット型 説明 ファイル 行 プロジェクト
|
10
|
-
|
11
|
-
エラー KeyValuePair`2 key ComboBox.NoTarget Object 型 KeyValuePair`2 のオブジェクトに key プロパティが見つかりません。 \mainwindow.xaml 13 Questions355574
|
12
|
-
|
13
|
-
```
|
14
|
-
|
15
|
-
「XAML バインド エラー」ウィンドウが見つからなければ、「出力」ウィンドウでもいいです。
|
16
|
-
|
17
|
-
```
|
18
|
-
|
19
|
-
System.Windows.Data Error: 40 : BindingExpression path error: 'key' property not found on 'object' ''KeyValuePair`2' (HashCode=54645477)'. BindingExpression:Path=key; DataItem='KeyValuePair`2' (HashCode=54645477); target element is 'ComboBox' (Name=''); target property is 'NoTarget' (type 'Object')
|
20
|
-
|
21
|
-
```
|
22
|
-
|
23
|
-
|
24
|
-
|
25
13
|
`key`が見つからないと言っています。そのため`DicValue`とバインドできていません。
|
26
|
-
|
27
14
|
指定するのは`Key`です。
|
28
|
-
|
29
|
-
|
30
|
-
|
31
15
|
|
32
16
|
|
33
17
|
> 選択した結果をTwowayで(DicValue)反映させたいです。
|
34
18
|
|
35
|
-
|
36
|
-
|
37
19
|
`TwoWay`の意味が初期値の反映とUIからの変更のみであれば、今のまま(自動プロパティ)でいいです。
|
38
|
-
|
39
20
|
コードからも変更したい場合は、`PropertyChanged`を発砲する必要があります。
|
40
21
|
|
41
22
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
```x
|
23
|
+
```xml
|
46
|
-
|
47
24
|
<Window
|
48
|
-
|
49
25
|
x:Class="Questions355574.MainWindow"
|
50
|
-
|
51
26
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
52
|
-
|
53
27
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
54
|
-
|
55
28
|
Width="800"
|
56
|
-
|
57
29
|
Height="450">
|
58
|
-
|
59
30
|
<StackPanel>
|
60
|
-
|
61
31
|
<ComboBox
|
62
|
-
|
63
32
|
DisplayMemberPath="Value"
|
64
|
-
|
65
33
|
ItemsSource="{Binding ComboDic}"
|
66
|
-
|
67
34
|
SelectedValue="{Binding DicValue}"
|
68
|
-
|
69
35
|
SelectedValuePath="Key"
|
70
|
-
|
71
36
|
SelectionChanged="cmb1_Changed" />
|
72
|
-
|
73
37
|
<Button Click="Button_Click" Content="みかん" />
|
74
|
-
|
75
38
|
</StackPanel>
|
76
|
-
|
77
39
|
</Window>
|
78
|
-
|
79
40
|
```
|
80
41
|
|
81
|
-
|
82
|
-
|
83
|
-
```
|
42
|
+
```cs
|
84
|
-
|
85
43
|
using System.Collections.Generic;
|
86
|
-
|
87
44
|
using System.ComponentModel;
|
88
|
-
|
89
45
|
using System.Diagnostics;
|
90
|
-
|
91
46
|
using System.Runtime.CompilerServices;
|
92
|
-
|
93
47
|
using System.Windows;
|
94
|
-
|
95
48
|
using System.Windows.Controls;
|
96
49
|
|
97
|
-
|
98
|
-
|
99
50
|
namespace Questions355574
|
100
|
-
|
101
51
|
{
|
102
|
-
|
103
52
|
public partial class MainWindow : Window, INotifyPropertyChanged
|
104
|
-
|
105
53
|
{
|
106
|
-
|
107
54
|
public Dictionary<string, string> ComboDic { get; }
|
108
55
|
|
109
|
-
|
110
|
-
|
111
56
|
public string DicValue { get; set; }
|
112
|
-
|
113
57
|
//public string DicValue { get => _DicValue; set => Set(ref _DicValue, value); }
|
114
|
-
|
115
58
|
//private string _DicValue;
|
116
59
|
|
117
|
-
|
118
|
-
|
119
60
|
public MainWindow()
|
120
|
-
|
121
61
|
{
|
122
|
-
|
123
62
|
InitializeComponent();
|
124
63
|
|
125
|
-
|
126
|
-
|
127
64
|
ComboDic = new Dictionary<string, string>
|
128
|
-
|
129
65
|
{
|
130
|
-
|
131
66
|
{ "10", "りんご" },
|
132
|
-
|
133
67
|
{ "20", "みかん" },
|
134
|
-
|
135
68
|
{ "30", "ぶどう" },
|
136
|
-
|
137
69
|
};
|
138
|
-
|
139
70
|
DicValue = "20";
|
140
71
|
|
72
|
+
DataContext = this;
|
73
|
+
}
|
141
74
|
|
75
|
+
private void cmb1_Changed(object sender, SelectionChangedEventArgs e)
|
76
|
+
{
|
77
|
+
Debug.WriteLine(DicValue);
|
78
|
+
}
|
142
79
|
|
80
|
+
private void Button_Click(object sender, RoutedEventArgs e)
|
81
|
+
{
|
82
|
+
// DicValue { get; set; }のほうではこの変更が反映されない!
|
83
|
+
// こういうことをしたい場合は、PropertyChangedを発砲する必要がある(コメントされているDicValueのほうを使う)
|
143
|
-
Da
|
84
|
+
DicValue = "20";
|
144
|
-
|
145
85
|
}
|
146
86
|
|
147
87
|
|
148
|
-
|
149
|
-
p
|
88
|
+
public event PropertyChangedEventHandler PropertyChanged;
|
150
|
-
|
89
|
+
protected void Set<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
|
151
90
|
{
|
152
|
-
|
91
|
+
if (Equals(storage, value)) return;
|
92
|
+
storage = value;
|
153
|
-
|
93
|
+
OnPropertyChanged(propertyName);
|
154
|
-
|
155
94
|
}
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
private void Button_Click(object sender, RoutedEventArgs e)
|
160
|
-
|
161
|
-
{
|
162
|
-
|
163
|
-
// DicValue { get; set; }のほうではこの変更が反映されない!
|
164
|
-
|
165
|
-
// こういうことをしたい場合は、PropertyChangedを発砲する必要がある(コメントされているDicValueのほうを使う)
|
166
|
-
|
167
|
-
DicValue = "20";
|
168
|
-
|
169
|
-
}
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
public event PropertyChangedEventHandler PropertyChanged;
|
176
|
-
|
177
|
-
protected void Set<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
|
178
|
-
|
179
|
-
{
|
180
|
-
|
181
|
-
if (Equals(storage, value)) return;
|
182
|
-
|
183
|
-
storage = value;
|
184
|
-
|
185
|
-
OnPropertyChanged(propertyName);
|
186
|
-
|
187
|
-
}
|
188
|
-
|
189
95
|
protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
190
|
-
|
191
96
|
}
|
192
|
-
|
193
97
|
}
|
194
|
-
|
195
98
|
```
|