これら2の答えに続いて:
MVVM での WPF DataGridComboBoxColumn の使用 - ViewModel でのプロパティへのバインド
WPF DataGridComboBoxColumn を MVVM にバインドする
1) コンボボックスで選択が行われたときに、ObservableCollections の値を設定することができません。
コンボボックスには ViewModel からのリストが取り込まれていますが、値は設定されていません。
コード:
<DataGrid ItemsSource="{Binding SidValues1through5, Mode=TwoWay}"
AutoGenerateColumns="False"
Grid.Row="1"
Margin="5"
VerticalAlignment="Top"
HorizontalAlignment="Center">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="1"
Width="100"
SelectedValueBinding="{Binding Value1}"
SelectedValuePath="Value1">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource"
Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.AvailableSids}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource"
Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.AvailableSids}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
ViewModel インターフェイス (デバッグして ViewModel に接続しています。ビューの他のコントロールは正しくバインドされています。
ETA: BindableCollection は、Caliburn.Micro タイプの ObservableCollection から継承します。
public interface ICustomSIDViewModel : IScreen
{
BindableCollection<SidValues> SidValues1through5 { get; set; }
BindableCollection<SidValues> SidValues6through10 { get; set; }
IList<string> AvailableSids { get; }
}
public class SidValues
{
public string Value1 { get; set; }
public string Value2 { get; set; }
public string Value3 { get; set; }
public string Value4 { get; set; }
public string Value5 { get; set; }
}
2)これを解決したら、すべての列にこの DataGridComboBoxColumn.ElementStyle と DataGridComboBoxColumn.EditingElementStyle のセットを継承させるよりクリーンな方法はありますか?
私が尋ねる理由は、すべて同じコンボボックスリストを持つ10列があるからです。