Devexpress MVVM OpenFileDialogService&&SaveFileDialogService

来源:互联网 发布:wow7.0装备数据库 编辑:程序博客网 时间:2024/06/07 14:45

废话不多说直接上代码

视图:

<UserControl 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:dxr="http://schemas.devexpress.com/winfx/2008/xaml/ribbon"  x:Class="WpfApp1.Views.MainView"             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"             xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" xmlns:ViewModels="clr-namespace:WpfApp1.ViewModels"             mc:Ignorable="d"             DataContext="{dxmvvm:ViewModelSource Type=ViewModels:MainViewModel}"             d:DesignHeight="300" d:DesignWidth="800">    <dxmvvm:Interaction.Behaviors>        <dxmvvm:OpenFileDialogService Title="{Binding Title}" />        <dxmvvm:SaveFileDialogService Title="{Binding Title}" />    </dxmvvm:Interaction.Behaviors>    <DockPanel>        <dxr:RibbonControl DockPanel.Dock="Top"                           ShowApplicationButton="False"                           ToolbarShowMode="Hide"                           RibbonTitleBarVisibility="Collapsed">            <dxr:RibbonDefaultPageCategory Caption="Default Category">                <dxr:RibbonPage Caption="File">                    <dxr:RibbonPageGroup Caption="Actions">                        <dxb:BarButtonItem Content="Open"                                           Command="{Binding OpenCommand}"                                           Glyph="{dx:DXImage Image=Open_16x16.png}"                                           LargeGlyph="{dx:DXImage Image=Open2_32x32.png}"                                           RibbonStyle="Large" />                        <dxb:BarButtonItem Content="Save"                                           Command="{Binding SaveCommand}"                                           Glyph="{dx:DXImage Image=Save_16x16.png}"                                           LargeGlyph="{dx:DXImage Image=Save_32x32.png}"                                           RibbonStyle="Large" />                    </dxr:RibbonPageGroup>                    <dxr:RibbonPageGroup Caption="Settings">                        <dxb:BarEditItem Content="Title"                                         EditValue="{Binding Title}">                            <dxb:BarEditItem.EditSettings>                                <dxe:TextEditSettings />                            </dxb:BarEditItem.EditSettings>                        </dxb:BarEditItem>                        <dxb:BarEditItem Content="Filter"                                         EditValue="{Binding Filter}">                            <dxb:BarEditItem.EditSettings>                                <dxe:TextEditSettings />                            </dxb:BarEditItem.EditSettings>                        </dxb:BarEditItem>                        <dxb:BarEditItem Content="Filter Index"                                         EditValue="{Binding FilterIndex}">                            <dxb:BarEditItem.EditSettings>                                <dxe:TextEditSettings />                            </dxb:BarEditItem.EditSettings>                        </dxb:BarEditItem>                    </dxr:RibbonPageGroup>                </dxr:RibbonPage>            </dxr:RibbonDefaultPageCategory>        </dxr:RibbonControl>        <dxr:RibbonStatusBarControl DockPanel.Dock="Bottom">            <dxr:RibbonStatusBarControl.RightItems>                <dxb:BarStaticItem Content="{Binding DialogResult}">                    <dxb:BarStaticItem.ContentTemplate>                        <DataTemplate>                            <StackPanel Orientation="Horizontal">                                <TextBlock Text="Dialog Result: " />                                <TextBlock Text="{Binding}" />                            </StackPanel>                        </DataTemplate>                    </dxb:BarStaticItem.ContentTemplate>                </dxb:BarStaticItem>            </dxr:RibbonStatusBarControl.RightItems>        </dxr:RibbonStatusBarControl>        <TextBox Text="{Binding FileBody, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"                 AcceptsReturn="True"                 TextWrapping="Wrap" />    </DockPanel></UserControl>

对应模型视图:

using System;using DevExpress.Mvvm.DataAnnotations;using DevExpress.Mvvm;using DevExpress.Mvvm.POCO;using System.Linq;using System.IO;namespace WpfApp1.ViewModels{    [POCOViewModel]    public class MainViewModel    {        #region Common properties        public virtual string Filter { get; set; }        public virtual int FilterIndex { get; set; }        public virtual string Title { get; set; }        public virtual bool DialogResult { get; protected set; }        public virtual string ResultFileName { get; protected set; }        public virtual string FileBody { get; set; }        #endregion        #region SaveFileDialogService specific properties        public virtual string DefaultExt { get; set; }        public virtual string DefaultFileName { get; set; }        public virtual bool OverwritePrompt { get; set; }        #endregion        protected ISaveFileDialogService SaveFileDialogService { get { return this.GetService<ISaveFileDialogService>(); } }        protected IOpenFileDialogService OpenFileDialogService { get { return this.GetService<IOpenFileDialogService>(); } }        public MainViewModel()        {            Filter = "Text Files (.txt)|*.txt|All Files (*.*)|*.*";            FilterIndex = 1;            Title = "Custom Dialog Title";            DefaultExt = "txt";            DefaultFileName = "Document1";            OverwritePrompt = true;        }        public void Open()        {            OpenFileDialogService.Filter = Filter;            OpenFileDialogService.FilterIndex = FilterIndex;            DialogResult = OpenFileDialogService.ShowDialog();            if (!DialogResult)            {                ResultFileName = string.Empty;            }            else            {                IFileInfo file = OpenFileDialogService.Files.First();                ResultFileName = file.Name;                using (var stream = file.OpenText())                {                    FileBody = stream.ReadToEnd();                }            }        }        public void Save()        {            SaveFileDialogService.DefaultExt = DefaultExt;            SaveFileDialogService.DefaultFileName = DefaultFileName;            SaveFileDialogService.Filter = Filter;            SaveFileDialogService.FilterIndex = FilterIndex;            DialogResult = SaveFileDialogService.ShowDialog();            if (!DialogResult)            {                ResultFileName = string.Empty;            }            else            {                using (var stream = new StreamWriter(SaveFileDialogService.OpenFile()))                {                    stream.Write(FileBody);                }            }        }    }}

特别提醒,在Devexpress MVVM模式中。ModelView中的方法可在Model中直接以命令的形式绑定。比如OPEN,对应绑定的就是OpenCommmand,Debug,对应的就是DebugCommand.

0 0
原创粉丝点击