我正在使用优秀的MVVM Light Toolkit。我的ViewModel公开:
public const string CourtCodesTypeCourtPropertyName = "CourtCodesTypeCourt";
private List<CourtType> _courtCodesTypes = new List<CourtType>();
public List<CourtType> CourtCodesTypeCourt
{
get
{
return _courtCodesTypes;
}
set
{
if (_courtCodesTypes == value)
{
return;
}
var oldValue = _courtCodesTypes;
_courtCodesTypes = value;
// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged(CourtCodesTypeCourtPropertyName, oldValue, value, true);
}
}
public const string CourtCodesPropertyName = "CourtCodes";
private List<Court> _courtCodes = null;
public List<Court> CourtCodes
{
get
{
return _courtCodes;
}
set
{
if (_courtCodes == value)
{
return;
}
var oldValue = _courtCodes;
_courtCodes = value;
// Update bindings and broadcast change using GalaSoft.Utility.Messenging
RaisePropertyChanged(CourtCodesPropertyName, oldValue, value, true);
}
}
这个视图有一个数据网格:
<DataGrid
ItemsSource="{Binding CourtCodes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False"
AlternatingRowBackground="{DynamicResource OffsetBrown}"
AlternationCount="1" Margin="45,0">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Abbreviation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Header="Abbreviation"
Width="25*" />
<DataGridTextColumn Binding="{Binding FullName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Header="Court"
Width="75*" />
<DataGridComboBoxColumn Header="CourtType"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.CourtCodesTypeCourt} TextBinding="{Binding CourtTypeDescription}""/>
</DataGrid.Columns>
</DataGrid>
DataGrid有一个ItemsSource,如您所见,是CourtCodes。我希望CourtType列是包含在CourtCodesTypeCourt中的所有枚举CourtTypes的下拉列表。但我无法似乎将DataGridComboBoxColumn与任何内容相匹配。目前的失败尝试正在寻找使用RelativeSource...那么我错在哪里了?
除了不起作用外,我看到的两个错误是:
System.Windows.Data错误:4:找不到引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Window',AncestorLevel ='1''的绑定源。BindingExpression:Path = DataContext.CourtCodesTypeCourt; DataItem = null; target element is 'DataGridComboBoxColumn' (HashCode = 38771709); target property is' ItemsSource '(type 'IEnumerable')
和
System.Windows.Data Error:40:BindingExpression路径错误:'CourtCodesTypeCourt'属性在对象'“Court”(HashCode=38141773)'上未找到。BindingExpression:Path = CourtCodesTypeCourt.CourtTypeDescription; DataItem ='Court' (HashCode=38141773); target element is' ComboBox '(Name=''); target property is' Text '(type' String ')
DisplayMemberPath="CourtTypeDescription"
就可以了。 - Kent BoogaartRelativeSource
的建议让我找到了解决 DataGrid 样式绑定中的另一个问题的正确方法。非常感谢! :) - Dan J