我遇到了困难的约束情况。我正在使用Telerik RadGridView和GridViewComboBoxColumn。我有两个组合框,一个“From”和一个“To”绑定List<int>
。当用户放下“打开”组合框时,显示的值应反映“可用”整数范围。可用的整数由当前行From和To范围中的整数范围减去其他行中的范围组成。
我遇到的问题是From组合框是绑定的List<int>
,当我创建可用的整数列表时,它会删除在所有其他未选择的行中找到的整数范围。例如,如果我有一个List<int>
1-48,第一行的范围是25-36,第二行的范围是37-42。当用户在第一行打开“从”组合框时,将显示列表1-36和43-48。范围37-42不可用,因为它在第二行使用。
第1行 从= 25到= 36 第2行 从= 37到= 42
这就是问题所在: 由于绑定列表不包含整数37-42,因此第二行的选定项目在列表中不再可用,并且不会显示在网格中。 在第1行的“从组合框”关闭后,第二行的“从组合框”应显示“37”。我需要一种方法来记住非选定行的值,并在From组合框中显示这些值,即使它们在绑定列表中找不到。
仅供参考:我不关心这里的TO组合框,可能任何FROM解决方案也可以应用于TO组合框。
我知道这很令人困惑,请问你是否有疑问。基本上我需要一种方法来保留未选择的行选定项目,当这些项目不再出现在绑定列表中时。我只需要显示原始选择的值。在打开下拉列表之前,第二行组合框中的项目并不重要。然后这种情况发生逆转,我需要能够回忆起第一行的选定项目。
telerik:GridViewComboBoxColumn x:Name="cboFrom2" Header="From" Width="Auto"
IsFilterable="False" IsGroupable="False" IsReorderable="False" IsSortable="False"
DataMemberBinding="{Binding StrandFrom}" EditTriggers="CellClick" >
<telerik:GridViewComboBoxColumn.EditorStyle>
<Style TargetType="telerik:RadComboBox">
<Setter Property="OpenDropDownOnFocus" Value="True"/>
</Style>
</telerik:GridViewComboBoxColumn.EditorStyle>
</telerik:GridViewComboBoxColumn>
答案 0 :(得分:1)
如果我理解正确,那么如何使用将可用选项列表与所选选项相结合的多转换器呢?
在ViewModel
中,保留ObservableCollection
个可用选项。这是您的数据项未使用的任何数字。每当数据项的To
或From
属性发生更改时,请更改可用选项列表。
然后将您的ComboBox绑定到可用选项列表,并使用多转换器将当前选定的项添加到ItemsSource
这是一些粗略的伪代码。我没有通过编译器或任何东西运行它,但它应该给你一般的想法。
查看模型
public ObservableCollection<int> AvailableNumbers;
public ObservableCollection<MyClass> DataObjects;
foreach(var obj in DataObjects)
{
obj.PropertyChanged += DataObject_PropertyChanged;
}
void DataObject_PropertyChanged(src as object, e as PropertyChangedEventArgs)
{
if (e.PropertyName == "To" || e.PropertyName == "From")
// Adjust AvailableNumbers list
}
<强> XAML 强>
<ComboBox SelectedItem="{Binding From}">
<ComboBox.ItemsSource>
<MultiBinding Converter="{StaticResource CombineListAndObjectMultiConverter}">
<Binding RelativeSource="{RelativeSource AncestorType={x:Type DataGrid}}"
Path="DataContext.AvailableNumbers"/>
<Binding Path="From" />
</MultiBinding>
</ComboBox.ItemsSource>
</ComboBox>
您的CombineListAndObjectMultiConverter
只会将一个对象添加到列表中并返回列表。