我有一個包含多個列的 DataGrid,包括一個 DataGridComboBoxColumn。
我希望 ComboBox 只為第一行提供有限的選擇。
<DataGridComboBoxColumn x:Name="myDataGrid"
SelectedItemBinding="{Binding Direction,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Source={StaticResource DirectionTypesCVS}}"
Header="Direction"
Width="*"/>
我的 DirectionTypeCVS 是一個 CollectionViewSource,它回傳一個 DirectionType 列舉串列,“北、東、南、西”。對于第一行,我想將其限制為“北”和“南”。
我試過在代碼隱藏中更改 ItemsSource ,但這行為不正確。我還嘗試添加一個 CollectionViewSource 過濾器,它似乎沒有被正確應用。
什么是正確的方法?
uj5u.com熱心網友回復:
我會建議您使用DataGridTemplateColumn而不是DataGridComboBoxColumn,因此您可以系結該行并可以找到一個AlternationIndex. 您需要做的是撰寫一個轉換器。
<DataGrid ItemsSource="..." AutoGenerateColumns="False" AlternationCount="2147483647">
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding Direction, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.ItemsSource>
<MultiBinding Converter="{StaticResource multivalcnv}">
<Binding Source="{StaticResource yourStr}"/>
<Binding Path="AlternationIndex" RelativeSource="{RelativeSource AncestorType=DataGridRow}"/>
</MultiBinding>
</ComboBox.ItemsSource>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
public class MultValConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if(values != null && values.Length == 2 && values[1] is int)
if((int)(values[1]) == 0)
{
return new List<string> { "Do filter the values[0]" };
}
else
return values[0];
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException("It's a one way converter.");
}
}
uj5u.com熱心網友回復:
如果您設定to的AlternationCount屬性并使用 a與系結到parent的附加屬性的a ,則可以避免使用轉換器:DataGridint.MaxValueStyleDataTriggerItemsControl.AlternationIndexDataGridRow
<DataGrid ... AlternationCount="2147483647">
<DataGrid.Columns>
<DataGridComboBoxColumn x:Name="myDataGrid"
SelectedItemBinding="{Binding Direction,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Header="Direction"
Width="*">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Style.Triggers>
<DataTrigger Binding="{Binding (ItemsControl.AlternationIndex),
RelativeSource={RelativeSource AncestorType=DataGridRow}}"
Value="0">
<Setter Property="ItemsSource" Value="{Binding Source={StaticResource DirectionTypesCVSSpecial}}"/>
</DataTrigger>
</Style.Triggers>
<Setter Property="ItemsSource" Value="{Binding Source={StaticResource DirectionTypesCVS}}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/382129.html
