【发布时间】:2017-09-22 02:48:36
【问题描述】:
我只想在 Combobox 中显示那些不存在于表格列中的元素。
我的桌子:
<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 虚拟机
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();
}
}
【问题讨论】:
-
你在使用 MVVM 吗?请同时发布您的 ViewModel 代码
-
你的问题太宽泛了。但是您应该为您的
AvaibleAgents集合查看CollectionViewSource,以便进行过滤。 -
抱歉,我现在尝试添加一些虚拟机。你的建议看起来像我所需要的