2017-04-25 23 views
-1

我想在組合框僅這些要素,以顯示這些元素,沒有在表列中存在。如何在組合框中僅顯示不在表C#

我的表:

<DataGrid Grid.Row="1" ItemsSource="{Binding MainRows, ValidatesOnDataErrors=True}" 
    CanUserAddRows="True" 
    > 
<DataGrid.Columns> 
    <DataGridTemplateColumn Width="2*" Header="Agent" > 
     <DataGridTemplateColumn.CellTemplate > 
      <DataTemplate> 
       <ComboBox 
        SelectedItem="{Binding Item, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" 
        ItemsSource="{Binding Path=DataContext.AvaibleAgents, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}}"> 
       <ComboBox> 
      </DataTemplate> 
     </DataGridTemplateColumn.CellTemplate> 
    </DataGridTemplateColumn> 

用戶可以添加代理只是一個時間。一個想從組合框的項目刪除,那些在數據網格存在 我的DataContext VM

public class MainDocumentVM : CCRDocumentVM 
{ 
    public MainDocumentVM(CCRMainDocument innerValue) : base(innerValue) 
    { 
    } 

public List<MainRowVM> _MainRows; 
public List<MainRowVM> MainRows 
{ 
    get 
    { 
     //TODO: Refactor it ASAP 
     if (MainRows == null) 
     { 
      _ccrMainRows = (InnerValue as MainDocument).MainRows.Select(x => new MainRowVM(x)).ToList(); 
     } 
     return _MainRows.Where(x=>x.InnerValue.IsActive).ToList(); 
    } 
} 
#region Functionality 
private MainRowVM _selectedRow; 

public MainRowVM SelectedRow 
{ 
    get { return _selectedRow; } 
    set 
    { 
     _selectedRow = value; 
     OnPropertyChanged(); 
    } 
} 


public ICommand AddNewRowCommand 
{ 
    get 
    { 
     return Commands.GetOrCreateCommand(() => AddNewRowCommand,(() => AddNewRow(CCRMainRow.CreateNew<MainRow>()))); 
    } 
} 


public void AddNewRow(MainRow row) 
{ 
     (InnerValue as MainDocument).CCRMainRows.Add(row); 
     if (_MainRows != null) 
     { 
      MainRows.Add(new MainRowVM(row)); 
     } 
     OnPropertyChanged(nameof(MainRows)); 
     //OnPropertyChanged(nameof(AvaibleItems)); 
} 

public List<Agents> AvaibleAgents 
{ 
    get 
    { 
     return ManagerFactoryResolver.CurrentFactory.CCRAgentsManager.AllValues 
      .ToList(); 
    } 
} 

}

排我的視圖模型:

public class MainRowVM : EditableDataVM<MainRow> 
{ 
    public MainRowVM(MainRow innervalue) : base(innervalue) 
    { } 

    public Agent Agent 
    { 
     get 
     { 
      return ManagerFactoryResolver.CurrentFactory.AgentManager 
       .AllValues.FirstOrDefault(x => x.Id == InnerValue.AgentID); 
     }  
     set 
     { 
      InnerValue.AgentID = value.Id; 
      OnPropertyChanged(); 
     } 
    } 
+0

您使用的MVVM?請發佈您的ViewModel代碼 – ganeshran

+0

您的問題太廣泛。但是您應該查看'CollectionViewSource'來獲取您的'AvaibleAgents'集合,這樣您就可以實施過濾。 –

+0

對不起,現在我試着添加一些虛擬機。 你的意見的樣子,我有什麼需要 –

回答

0

你需要更新的AvailableAgents列表你的虛擬機用戶每次添加一個代理,刪除剛纔新增的agend ...

0

你應該過濾掉,你會選擇到任何邏輯的那些元素在您的視圖模型,並用一個屬性暴露它們(例如,一個屬性調用ExcludedItems),然後綁定ComboBox.ItemsSource到該屬性。每次更新集合/表時,都會引發屬性更改,以反映ComboBox中的更改。

需要注意的幾點 - 當綁定時,您不一定必須使用DataContext.前綴,因爲自當前DataContext以來只有屬性本身始終是數據上下文。

+0

如果我從集合中框列表中刪除項目,這是不能忽視的節目在查看組合框,並拋出異常。 –

+0

你得到的例外是什麼? –

+0

我從佔項目的ItemSource刪除,如果他們結合排.. 我得到一些像「選擇項爲空」 becouse它從數據源中刪除,如果將它添加到數據網格。 矛盾) –

相關問題