Saving Grid (Dev Express) Layout with MVVM (code from DevExpress support), mvvmdevexpress

Source: Internet
Author: User

Saving Grid (Dev Express) Layout with MVVM (code from DevExpress support), mvvmdevexpress

<Window x:Class="WPFGridTest.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"        xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"        xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"        xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"        xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"        xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol"        xmlns:local="clr-namespace:WPFGridTest"        Title="MainWindow" Height="350" Width="525">    <Window.DataContext>        <local:VM/>    </Window.DataContext>    <Window.Resources>        <local:SaveRestoreCommands x:Key="saveRestoreLayoutCommands" Path="1.xml"/>    </Window.Resources>    <Grid>        <Grid.RowDefinitions>            <RowDefinition Height="Auto"/>            <RowDefinition Height="*"/>        </Grid.RowDefinitions>        <StackPanel Orientation="Horizontal">            <Button Content="Save" Command="{Binding Path=SaveLayoutCommand, Source={StaticResource saveRestoreLayoutCommands}}" CommandParameter="{Binding ElementName= g}"/>            <Button Content="Restore" Command="{Binding Path=RestoreLayoutCommand, Source={StaticResource saveRestoreLayoutCommands}}" CommandParameter="{Binding ElementName=g}"/>        </StackPanel>        <dxg:GridControl x:Name="g" Grid.Row="1" ItemsSource="{Binding Source}">            <dxg:GridControl.View>                <dxg:TableView x:Name="v"/>            </dxg:GridControl.View>            <dxg:GridControl.Columns>                <dxg:GridColumn x:Name="c1" FieldName="ID"/>                <dxg:GridColumn x:Name="c2" FieldName="Value"/>            </dxg:GridControl.Columns>        </dxg:GridControl>    </Grid></Window>
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using DevExpress.Xpf.Grid;using DevExpress.Xpf.Core.Native;using DevExpress.Xpf.Bars;using System.ComponentModel;using System.Windows.Interactivity;using DevExpress.Xpf.Core;using System.ComponentModel.DataAnnotations;using System.Data;using System.Collections.ObjectModel;using DevExpress.Xpf.Editors;using DevExpress.Data;using DevExpress.Xpf.Editors.Settings;using DevExpress.Xpf.Core.Commands;using System.IO;namespace WPFGridTest {    /// <summary>    /// Interaction logic for MainWindow.xaml    /// </summary>    public partial class MainWindow : Window {        public MainWindow() {            InitializeComponent();        }    }    public class VM {        public TestDataList Source { get; set; }        public VM() {            Source = TestDataList.Create();        }    }    public class TestDataList : ObservableCollection<TestDataItem> {        public static TestDataList Create() {            TestDataList res = new TestDataList();            TestDataItem item = new TestDataItem();            item.ID = 0;            item.Value = "A";            res.Add(item);            item = new TestDataItem();            item.ID = 1;            item.Value = "b";            res.Add(item);            item = new TestDataItem();            item.ID = 2;            item.Value = "C";            res.Add(item);            item = new TestDataItem();            item.ID = 3;            item.Value = "C";            res.Add(item);            return res;        }    }    public class TestDataItem {        public int ID { get; set; }        public string Value { get; set; }    }    public class SaveRestoreLayoutCommandBase : ICommand {        internal string Path { get; set; }        public virtual bool CanExecute(object parameter) {            if (string.IsNullOrEmpty(Path)) return false;            return true;        }        public event EventHandler CanExecuteChanged;        public virtual void Execute(object parameter) {            if (!(parameter is GridControl)) throw new Exception();        }        internal void RaiseCanExecuteChanged() {            if (CanExecuteChanged != null) CanExecuteChanged(this, EventArgs.Empty);        }    }    public class SaveLayoutCommand : SaveRestoreLayoutCommandBase {        public event EventHandler Executed;        public override void Execute(object parameter) {            base.Execute(parameter);            ((GridControl)parameter).SaveLayoutToXml(Path);            if (Executed != null) Executed(this, EventArgs.Empty);        }    }    public class RestoreLayoutCommand : SaveRestoreLayoutCommandBase {        public override bool CanExecute(object parameter) {            if (!base.CanExecute(parameter) || !File.Exists(Path))                return false;            return true;        }        public override void Execute(object parameter) {            base.Execute(parameter);            ((GridControl)parameter).RestoreLayoutFromXml(Path);        }    }    public class SaveRestoreCommands {        string path;        public string Path { get { return path; }            set {                path = value;                SaveLayoutCommand.Path = path;                RestoreLayoutCommand.Path = path;            }        }        public SaveLayoutCommand SaveLayoutCommand { get; private set; }        public RestoreLayoutCommand RestoreLayoutCommand { get; private set; }        public SaveRestoreCommands() {            SaveLayoutCommand = new SaveLayoutCommand() { Path = this.Path };            RestoreLayoutCommand = new RestoreLayoutCommand() { Path = this.Path };            SaveLayoutCommand.Executed +=new EventHandler(SaveLayoutCommand_Executed);        }        void SaveLayoutCommand_Executed(object sender, EventArgs e) {            if (RestoreLayoutCommand != null) RestoreLayoutCommand.RaiseCanExecuteChanged();        }    }}

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.