質問編集履歴

2

追記

2020/03/10 00:39

投稿

lain
lain

スコア161

test CHANGED
File without changes
test CHANGED
@@ -311,3 +311,121 @@
311
311
  Visual Studio 2019
312
312
 
313
313
  .NET Framework 4.8
314
+
315
+
316
+
317
+
318
+
319
+ ### 解決いたしました(以下、解決コード)
320
+
321
+ ```C#
322
+
323
+ public class PersonTemplateSelector : DataTemplateSelector
324
+
325
+ {
326
+
327
+ public override DataTemplate SelectTemplate(object item, DependencyObject container)
328
+
329
+ {
330
+
331
+ ContentPresenter presenter = (ContentPresenter)container;
332
+
333
+ if (presenter.TemplatedParent is ComboBox)
334
+
335
+ return (DataTemplate)presenter.FindResource("SingleLine");
336
+
337
+ else
338
+
339
+ return (DataTemplate)presenter.FindResource("MultiLine");
340
+
341
+ }
342
+
343
+ }
344
+
345
+
346
+
347
+ ```
348
+
349
+
350
+
351
+ 上記クラスを追加しまして、
352
+
353
+
354
+
355
+ ```XAML
356
+
357
+ <Window.Resources>
358
+
359
+ <DataTemplate x:Key="SingleLine">
360
+
361
+ <StackPanel Orientation="Horizontal">
362
+
363
+ <TextBlock Text="{Binding ID}"/>
364
+
365
+ <TextBlock Text="{Binding Name}" />
366
+
367
+ </StackPanel>
368
+
369
+ </DataTemplate>
370
+
371
+
372
+
373
+ <DataTemplate x:Key="MultiLine">
374
+
375
+ <Grid>
376
+
377
+ <Grid.RowDefinitions>
378
+
379
+ <RowDefinition Height="Auto" />
380
+
381
+ <RowDefinition Height="Auto" />
382
+
383
+ </Grid.RowDefinitions>
384
+
385
+ <Grid.ColumnDefinitions>
386
+
387
+ <ColumnDefinition Width="Auto" />
388
+
389
+ <ColumnDefinition Width="Auto" />
390
+
391
+ </Grid.ColumnDefinitions>
392
+
393
+
394
+
395
+ <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding ID}"/>
396
+
397
+ <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Name}" />
398
+
399
+ <TextBlock Grid.Row="1" Grid.Column="0" Text="{Binding LeftData.Data1}" />
400
+
401
+ <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding RightData.Data1}" />
402
+
403
+ </Grid>
404
+
405
+ </DataTemplate>
406
+
407
+ </Window.Resources>
408
+
409
+ ```
410
+
411
+
412
+
413
+ リソースにDataTemplateを2つ用意し、
414
+
415
+
416
+
417
+ ```XAML
418
+
419
+ <ComboBox ItemsSource="{Binding PersonList, ElementName=my}"
420
+
421
+     SelectedItem="{Binding SelectedPerson, ElementName=my}">
422
+
423
+     <ComboBox.ItemTemplateSelector>
424
+
425
+         <local:PersonTemplateSelector />
426
+
427
+     </ComboBox.ItemTemplateSelector>
428
+
429
+ </ComboBox>
430
+
431
+ ```

1

説明の追加

2020/03/10 00:39

投稿

lain
lain

スコア161

test CHANGED
File without changes
test CHANGED
@@ -24,6 +24,34 @@
24
24
 
25
25
 
26
26
 
27
+ Personクラス内に下記プロパティをつくり、DisplayMemberPathプロパティにバインドした時は、
28
+
29
+ ```
30
+
31
+ public string DispStr
32
+
33
+ {
34
+
35
+ get { return string.Format("{0}{1}", ID, Name); }
36
+
37
+ }
38
+
39
+ ```
40
+
41
+
42
+
43
+ System.Windows.Markup.XamlParseException
44
+
45
+ InvalidOperationException: DisplayMemberPath と ItemTemplate を両方とも設定できません。
46
+
47
+
48
+
49
+ というエラーでした。
50
+
51
+
52
+
53
+
54
+
27
55
  ComboBox.SelectionBoxItemTemplateというそれらしいプロパティがあるのですが、使い方がいまいち分からないです。
28
56
 
29
57