2011-08-29 57 views
1

我遇到了困難的綁定情況。我正在使用Telerik RadGridView和GridViewComboBoxColumn。我有兩個組合框「發件人」和「收件人」分開登錄List<int>。當用戶放開From組合框時,所呈現的值應反映「可用」整數範圍。可用整數由當前行的From和To範圍中的整數範圍減去其他行中的範圍組成。困難telerik:RadCombobox ItemsSource綁定

我遇到的問題是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會發生什麼是第二行的選定項目在列表中不再可用,並且不會顯示在網格中。 第2行的來自組合框應在行1的來自組合框關閉後顯示'37'。我需要一種方法來記住未選定的行的值,並在From組合框中顯示這些值,即使它們未在綁定列表中找到。

FYI:我不關心這裏組合框,它很可能爲FROM也可以應用到組合框的任何解決方案。

我知道這是混淆,請問如果你有問題。基本上我需要一種方法來保留選定項目的非選定行,當這些項目不再出現在綁定列表中時。我只需要顯示原始選定的值。第二行組合框中的項目在打開下拉菜單之前並不重要。然後,這種情況反轉,我需要能夠調出第一行的選定項目。

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> 

回答

1

如果我理解正確,那麼使用多轉換器如何將可用選項列表與所選選項結合使用?

在你ViewModel,保持可用選項的ObservableCollection。這是您的數據項目未使用的任何號碼。每當數據項目的ToFrom屬性發生更改時,請更改可用選項列表。

那麼你的組合框綁定到可用選項的該列表,並使用多轉換器到當前選擇的項目添加到的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將簡單對象添加到列表中,並返回列表。

+0

蕾切爾,我喜歡你的想法。不幸的是我沒有使用MVVM。不過,我正在考慮將此控件移到MVVM,因爲我沒有看到其他方法。 – GAR8

+0

@ GAR8即使沒有MVVM設計模式,它也應該可以工作 – Rachel