如何在WPF中将网格属性传递给ViewModel而不进行绑定

时间:2019-03-15 14:46:47

标签: c# wpf xaml devexpress

我正在使用DevExpress XAML框架。在我的网格中,我有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中的Button到达它们。那是我的问题。

[解决方案]

我使用DevExpress.Mvvm.Messenger从RibbonControl调用EntriesHandle_Button()

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 :(得分:0)

使用CheckBoxSelectorColumn时,

GridControl完全支持 SelectedItems 绑定。重要的一点是,绑定到SelectedItems的项目应在视图模型级别初始化。这意味着,如果将 SelectedItems 绑定到属性 SelectedCustomers ,则必须使用空集合初始化 SelectedCustomers 。例如ObservableCollection