Как передать свойство сетки в ViewModel без привязки в WPF - PullRequest
0 голосов
/ 15 марта 2019

Я использую 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"); }      
        }
}


1 Ответ

0 голосов
/ 03 апреля 2019

GridControl полностью поддерживает SelectedItems привязку при использовании CheckBoxSelectorColumn .Одна важная вещь заключается в том, что проект, связанный с SelectedItems, должен быть инициализирован на уровне модели представления.Это означает, что если вы связали SelectedItems со свойством SelectedCustomers , необходимо инициализировать SelectedCustomers пустой коллекцией.Например ObservableCollection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...