|
分類:[.NET 全般]
Visual Studio 2017
C#
WPF
using Reactive.Bindings;
■前提
MainWindow に Button を配置し、その Button クリックでダイアログ(DialogA)を表示します。
DialogA には UserControl を配置し、その UserControl には DataGrid を配置しています。
DataGrid には DataGridTemplateColumn を配置し、
DataGridTemplateColumn には ComboBox を配置しています。
DialogA には DialogAViewModel が存在し、そこで
ComboBox の ItemsSouce に設定するプロパティ(Hoge)を宣言しています。
■問題点
ComboBox の ItemsSource に DialogAViewModel のプロパティをバインドする方法がわかりません。
下記のコードを実行してみましたが、DialogA が表示されませんでした。
ComboBox の ItemsSource に プロパティ(Hoge)をバインドすると何故か DialogA が表示されないです。
なお、エラーなどは出ていません。
バインドの仕方が悪いのだと思うのですが、よろしくお願いいたします。
DialogA
<UserControl.Resources>
<CollectionViewSource x:Key="HogeSource" Source="{Binding Hoge}" />
</UserControl.Resources>
<DataGrid ・・・>
<DataGrid.Columns>
<DataGridTemplateColumn Header="hoge" Width="100" CanUserSort="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="hogeCombo" Width="Auto" Height="Auto" IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding Source={StaticResource HogeSource}}"
SelectedValuePath="Number"
DisplayMemberPath="Name"
・・・/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<Grid FocusManager.FocusedElement="{Binding ElementName=hogeCombo}">
<ComboBox Name="hogeCombo" Width="Auto" Height="Auto" IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding Source={StaticResource HogeSource}}"
SelectedValuePath="Number"
DisplayMemberPath="Name"
・・・/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
DialogAViewModel
public ReactiveCollection<HogeHoge> Hoge { get; } = new ReactiveCollection<HogeHoge>();
Hoge.Add(new HogeHoge() { Number = 1, Name = "A" });
Hoge.Add(new HogeHoge() { Number = 2, Name = "B" });
public class HogeHoge
{
public int Number { get; set; }
public string Name { get; set; }
}
|