ILoading
This commit is contained in:
parent
25ce5d78ba
commit
313f8fd79b
@ -65,6 +65,16 @@ namespace CPF.Toolkit.Demo
|
|||||||
Content = "关闭窗体",
|
Content = "关闭窗体",
|
||||||
Commands = { { nameof(Button.Click),(s,e) => vm.Test() } }
|
Commands = { { nameof(Button.Click),(s,e) => vm.Test() } }
|
||||||
},
|
},
|
||||||
|
new Button
|
||||||
|
{
|
||||||
|
Content = "关闭窗体",
|
||||||
|
Commands = { { nameof(Button.Click),(s,e) => vm.Test() } }
|
||||||
|
},
|
||||||
|
new Button
|
||||||
|
{
|
||||||
|
Content = "loading",
|
||||||
|
Commands = { { nameof(Button.Click),(s,e) => vm.LoadingTest() } }
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -24,5 +24,18 @@ namespace CPF.Toolkit.Demo
|
|||||||
e.Cancel = !this.isClose;
|
e.Cancel = !this.isClose;
|
||||||
base.OnClose(e);
|
base.OnClose(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async void LoadingTest()
|
||||||
|
{
|
||||||
|
await this.ShowLoading(Task.Delay(3000));
|
||||||
|
this.Dialog.Sucess("test");
|
||||||
|
|
||||||
|
//var result = await this.ShowLoading(async () =>
|
||||||
|
//{
|
||||||
|
// await Task.Delay(5000);
|
||||||
|
// return "test";
|
||||||
|
//});
|
||||||
|
//this.Dialog.Sucess(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,5 +21,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\CPF\CPF.csproj" />
|
<ProjectReference Include="..\CPF\CPF.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -97,38 +97,25 @@ namespace CPF.Toolkit.Dialogs
|
|||||||
{ nameof(TextBox.Text),nameof(Text),this,BindingMode.OneWay}
|
{ nameof(TextBox.Text),nameof(Text),this,BindingMode.OneWay}
|
||||||
}
|
}
|
||||||
}.Assign(out var textBox),
|
}.Assign(out var textBox),
|
||||||
//new Border
|
|
||||||
//{
|
|
||||||
// Attacheds = { { Grid.RowIndex,2 } },
|
|
||||||
// BorderThickness = new Thickness(0,1,0,0),
|
|
||||||
// BorderType = BorderType.BorderThickness,
|
|
||||||
// BorderFill = "236,236,236",
|
|
||||||
// Size = SizeField.Fill,
|
|
||||||
// MarginBottom = 5,
|
|
||||||
//},
|
|
||||||
new StackPanel
|
new StackPanel
|
||||||
{
|
{
|
||||||
Height = "100%",
|
Height = "100%",
|
||||||
Attacheds = { { Grid.RowIndex,2 } },
|
Attacheds = { { Grid.RowIndex,2 } },
|
||||||
MarginBottom = 4,
|
MarginBottom = 4,
|
||||||
Orientation = Orientation.Horizontal,
|
Orientation = Orientation.Horizontal,
|
||||||
}.Assign(out var p),
|
|
||||||
}
|
}
|
||||||
}));
|
.LoopCreate(this.Buttons.Length, i => new Button
|
||||||
|
|
||||||
this.Buttons.Select(x => new Button
|
|
||||||
{
|
{
|
||||||
Content = x,
|
Content = this.Buttons[i],
|
||||||
MinWidth = this.Buttons.Length <= 1 ? 80 : 65,
|
MinWidth = this.Buttons.Length <= 1 ? 80 : 65,
|
||||||
Background = "white",
|
Background = "white",
|
||||||
BorderFill = "236,236,236",
|
BorderFill = "236,236,236",
|
||||||
Height = "95%",
|
Height = "95%",
|
||||||
MarginRight = 5,
|
MarginRight = 5,
|
||||||
}).ToList().ForEach(c =>
|
Commands = { { nameof(Button.Click),(s,e) => this.DialogResult = i } }
|
||||||
{
|
}),
|
||||||
p.Children.Add(c);
|
}
|
||||||
c.Click += Button_Click;
|
}));
|
||||||
});
|
|
||||||
textBox.TextChanged += TextBox_TextChanged;
|
textBox.TextChanged += TextBox_TextChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,12 +134,6 @@ namespace CPF.Toolkit.Dialogs
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Button_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
this.DialogResult = (sender as Button).Content;
|
|
||||||
this.Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnKeyUp(KeyEventArgs e)
|
protected override void OnKeyUp(KeyEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Key.Or(Keys.Enter, Keys.Space))
|
if (e.Key.Or(Keys.Enter, Keys.Space))
|
||||||
|
@ -8,7 +8,7 @@ namespace CPF.Toolkit.Dialogs
|
|||||||
{
|
{
|
||||||
internal interface IClosable
|
internal interface IClosable
|
||||||
{
|
{
|
||||||
event EventHandler<bool?> Closable;
|
event EventHandler<object> Closable;
|
||||||
void OnClosable(object sender, ClosingEventArgs e);
|
void OnClosable(object sender, ClosingEventArgs e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
CPF.Toolkit/Dialogs/ILoading.cs
Normal file
13
CPF.Toolkit/Dialogs/ILoading.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit.Dialogs
|
||||||
|
{
|
||||||
|
public interface ILoading
|
||||||
|
{
|
||||||
|
event Func<string, Task, Task<object>> ShowLoadingFunc;
|
||||||
|
event Func<string, Task,Task> ShowLoading;
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,7 @@ using CPF.Toolkit.Dialogs;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace CPF.Toolkit
|
namespace CPF.Toolkit
|
||||||
{
|
{
|
||||||
@ -36,9 +37,44 @@ namespace CPF.Toolkit
|
|||||||
{
|
{
|
||||||
dialog.Dialog = new DialogService(view);
|
dialog.Dialog = new DialogService(view);
|
||||||
}
|
}
|
||||||
|
if (view.DataContext is ILoading loading)
|
||||||
|
{
|
||||||
|
loading.ShowLoadingFunc += async (message, task) =>
|
||||||
|
{
|
||||||
|
var loadingBox = new LoadingBox { Message = message };
|
||||||
|
var layer = new LayerDialog
|
||||||
|
{
|
||||||
|
Name = "loadingDialog",
|
||||||
|
Content = loadingBox,
|
||||||
|
ShowCloseButton = false,
|
||||||
|
Background = null,
|
||||||
|
};
|
||||||
|
layer.ShowDialog(view);
|
||||||
|
dynamic t = task;
|
||||||
|
var result = await t;
|
||||||
|
loadingBox.Invoke(layer.CloseDialog);
|
||||||
|
return (object)result;
|
||||||
|
};
|
||||||
|
loading.ShowLoading += async (message, task) =>
|
||||||
|
{
|
||||||
|
var loadingBox = new LoadingBox { Message = message };
|
||||||
|
var layer = new LayerDialog
|
||||||
|
{
|
||||||
|
Name = "loadingDialog",
|
||||||
|
Content = loadingBox,
|
||||||
|
ShowCloseButton = false,
|
||||||
|
Background = null,
|
||||||
|
};
|
||||||
|
layer.ShowDialog(view);
|
||||||
|
await task;
|
||||||
|
loadingBox.Invoke(layer.CloseDialog);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private static void View_Closing(object sender, ClosingEventArgs e)
|
private static void View_Closing(object sender, ClosingEventArgs e)
|
||||||
{
|
{
|
||||||
var view = sender as Window;
|
var view = sender as Window;
|
||||||
|
@ -3,18 +3,24 @@ using CPF.Toolkit.Dialogs;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace CPF.Toolkit
|
namespace CPF.Toolkit
|
||||||
{
|
{
|
||||||
public class ViewModelBase : ObservableObject, IClosable, IDialog
|
public class ViewModelBase : ObservableObject, IClosable, IDialog, ILoading
|
||||||
{
|
{
|
||||||
event EventHandler<bool?> _close;
|
event EventHandler<object> _close;
|
||||||
|
event Func<string, Task, Task<object>> _showLoadingFunc;
|
||||||
|
event Func<string, Task, Task> _showLading;
|
||||||
|
event EventHandler<object> IClosable.Closable { add => this._close += value; remove => this._close -= value; }
|
||||||
|
event Func<string, Task, Task<object>> ILoading.ShowLoadingFunc { add => this._showLoadingFunc += value; remove => this._showLoadingFunc -= value; }
|
||||||
|
event Func<string, Task, Task> ILoading.ShowLoading { add => this._showLading += value; remove => this._showLading -= value; }
|
||||||
|
|
||||||
|
void IClosable.OnClosable(object sender, ClosingEventArgs e) => this.OnClose(e);
|
||||||
|
|
||||||
public IDialogService Dialog { get; set; }
|
public IDialogService Dialog { get; set; }
|
||||||
|
|
||||||
event EventHandler<bool?> IClosable.Closable { add => this._close += value; remove => this._close -= value; }
|
protected void Close(object dialogResult = null)
|
||||||
|
|
||||||
protected void Close(bool? dialogResult = null)
|
|
||||||
{
|
{
|
||||||
if (this._close == null)
|
if (this._close == null)
|
||||||
{
|
{
|
||||||
@ -25,6 +31,17 @@ namespace CPF.Toolkit
|
|||||||
|
|
||||||
protected virtual void OnClose(ClosingEventArgs e) { }
|
protected virtual void OnClose(ClosingEventArgs e) { }
|
||||||
|
|
||||||
void IClosable.OnClosable(object sender, ClosingEventArgs e) => this.OnClose(e);
|
protected async Task ShowLoading(Task task)
|
||||||
|
{
|
||||||
|
if (this._showLading == null) throw new ArgumentNullException();
|
||||||
|
await this._showLading.Invoke("加载中……", task);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async Task<T> ShowLoading<T>(Func<Task<T>> task)
|
||||||
|
{
|
||||||
|
if (this._showLoadingFunc == null) throw new ArgumentNullException();
|
||||||
|
var result = await this._showLoadingFunc.Invoke("加载中……", task.Invoke());
|
||||||
|
return (T)result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user