Devexpress MVVM OpenFileDialogService&&SaveFileDialogService

废话不多说直接上代码

视图:

<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.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值