按照这2个答案:
将 WPF DataGridComboBoxColumn 与 MVVM 结合使用 - 绑定到 ViewModel 中的属性
使用 MVVM 绑定 WPF DataGridComboBoxColumn
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 继承自 ObservableCollection,它是一个 Caliburn.Micro 类型。
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 列都有相同的组合框列表。