我正在使用DevExpress XAML框架。在我的网格中,我有CheckBoxSelectorColumn,它随Framework一起提供(我发现的最简单的选择方法)。
我不能使用绑定来获取SelectedItems,而是在main.xaml.cs中使用[gridName] .SelectedItems。
是否可以将SelectedItems传递给MainViewModel?
[编辑]
很抱歉我的问题不清楚,没有代码示例。 我将提供部分代码。
<dxg:GridControl Name="grid" SelectionMode="MultipleRow" AutoGenerateColumns="None" EnableSmartColumnsGeneration="false" ItemsSource="{Binding BugList}" Margin="0,0,0,20" Grid.RowSpan="2">
<dxg:GridControl.View>
<dxg:TableView
AllowEditing="False" ShowCheckBoxSelectorColumn="True"
HorizontalScrollbarVisibility="Auto"
/>
</dxg:GridControl.View>
<dxg:GridColumn FieldName="Description" Header="Description"/>
我使用了ShowCheckBoxSelectorColumn
属性来获取一列,每行中都有一个复选框用于多项选择。
该属性的缺点和好处是,无法将选定的项目通过绑定传递(如果我的研究是正确的),但是可以通过以下方式轻松地将它们传递给视图后端:
public void EntriesHandle_Button()
{
if (grid.SelectedItems.Count != 0)
{
if (DXMessageBox.Show("Do you really want to remove selected Items from your List?", "Question",
MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
//remove selected entries
}
}
else { MessageBox.Show("Please select entries", "Warning"); }
}
使用grid.SelectedItems
,我可以在视图的checkboxColumn中选择那些项目。
我想将SelectedItems传递给ViewModel,以便从RibbonComponent中的Button到达它们。那是我的问题。
[解决方案]
我使用DevExpress.Mvvm.Messenger从RibbonControl调用EntriesHandle_Button()
:
<dxb:BarButtonItem Name="BRemove" Content="Remove selected">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="ItemClick" Command="{Binding RemoveEntries_OnClick}"/>
</dxmvvm:Interaction.Behaviors>
</dxb:BarButtonItem>
public class RibbonViewModel : ViewModelBase
{
private readonly IRibbonCommands _ribbonCommands;
public RibbonViewModel(IRibbonCommands ribbonCommands)
{
_ribbonCommands = ribbonCommands;
RemoveEntries_OnClick = new DelegateCommand(_ribbonCommands.RemoveEntries);
}
public class RibbonCommands : IRibbonCommands
{
public void RemoveEntries()
{
string message = "remove";
Messenger.Default.Send(message);
}
}
public partial class MyUserControl: UserControl
{
public MyUserControl()
{
InitializeComponent();
DataContext = new MyUserControlViewModel();
Messenger.Default.Register<string>(this, EntriesHandle_Button);
}
public void EntriesHandle_Button(string message)
{
if (grid.SelectedItems.Count != 0)
{
switch (message)
{
case "remove":
if (DXMessageBox.Show("Do you really want to remove selected Items from your List?", "Question",
MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
//remove selected entries
}
break;
}
}
else { MessageBox.Show("Please select entries", "Warning"); }
}
}
答案 0 :(得分:0)
GridControl完全支持 SelectedItems 绑定。重要的一点是,绑定到SelectedItems的项目应在视图模型级别初始化。这意味着,如果将 SelectedItems 绑定到属性 SelectedCustomers ,则必须使用空集合初始化 SelectedCustomers 。例如ObservableCollection