Я использую DevExpress XAML Framework. В моей сетке есть CheckBoxSelectorColumn, который поставляется с Framework (самый простой способ сделать множественный выбор, который я нашел).
Я не могу использовать привязку для получения SelectedItems, вместо этого в моем main.xaml.cs я использую [gridName] .SelectedItems.
Есть ли способ передать SelectedItems в MainViewModel?
[Изменено]
Извините за то, что мой вопрос был неясным и без примеров кода.
Я собираюсь предоставить некоторые части моего кода.
MyUserControl.xaml
<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
, чтобы получить столбец с флажком в каждой строке для множественного выбора.
Недостатком свойства и одновременно преимуществом является то, что выбранные элементы не могут быть переданы через привязку (если мое исследование было правильным), но они могут быть легко переданы бэкэнду представления следующим образом:
MyUserControl.xaml.cs
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. Это был мой вопрос.
[РЕШЕНИЕ]
Я использовал DevExpress.Mvvm.Messenger для вызова EntriesHandle_Button()
из RibbonControl:
ribbon.xaml
<dxb:BarButtonItem Name="BRemove" Content="Remove selected">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EventToCommand EventName="ItemClick" Command="{Binding RemoveEntries_OnClick}"/>
</dxmvvm:Interaction.Behaviors>
</dxb:BarButtonItem>
RibbonViewModel.cs
public class RibbonViewModel : ViewModelBase
{
private readonly IRibbonCommands _ribbonCommands;
public RibbonViewModel(IRibbonCommands ribbonCommands)
{
_ribbonCommands = ribbonCommands;
RemoveEntries_OnClick = new DelegateCommand(_ribbonCommands.RemoveEntries);
}
RibbonCommands.cs
public class RibbonCommands : IRibbonCommands
{
public void RemoveEntries()
{
string message = "remove";
Messenger.Default.Send(message);
}
}
MyUserControl.xaml.cs
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"); }
}
}