テーブルの列に存在しない要素のみをコンボボックスに表示したいとします。コンボボックスにテーブルにない要素のみを表示する方法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>
ユーザーエージェントに一つだけの時間を追加することができます。コンボボックスの項目から削除する、それらは行の
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();
}
}
}
私のViewModel DataGrid内 私のDataContextのVMを存在:
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();
}
}
MVVMを使用していますか?あなたのViewModelコードも投稿してください – ganeshran
あなたの質問は広すぎます。しかし、 'AvaibleAgents'コレクションの' CollectionViewSource'を見て、フィルタリングを行うことができます。 –
申し訳ありませんが、今はVMを追加しようとしています。 あなたのアドバイスは、私が必要としているもののように見えます –