156 lines
4.5 KiB
C#
156 lines
4.5 KiB
C#
using Model.Entity;
|
|
using Prism.Commands;
|
|
using Prism.Ioc;
|
|
using Service.Interface;
|
|
using System.Collections.ObjectModel;
|
|
using System.Windows.Input;
|
|
using UIShare.ViewModelBase;
|
|
|
|
namespace MainModule.ViewModels
|
|
{
|
|
public class MainViewModel : NavigateViewModelBase
|
|
{
|
|
#region 属性
|
|
|
|
private ObservableCollection<PostEntity> _posts;
|
|
public ObservableCollection<PostEntity> Posts
|
|
{
|
|
get => _posts;
|
|
set => SetProperty(ref _posts, value);
|
|
}
|
|
|
|
private string _searchKeyword;
|
|
public string SearchKeyword
|
|
{
|
|
get => _searchKeyword;
|
|
set => SetProperty(ref _searchKeyword, value);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 命令
|
|
|
|
public ICommand CreatePostCommand { get; set; }
|
|
public ICommand SearchCommand { get; set; }
|
|
public ICommand CategorySelectCommand { get; set; }
|
|
|
|
#endregion
|
|
#region 私有字段
|
|
private IContainerProvider _containerProvider;
|
|
private IPostService _postService;
|
|
private IDialogService _dialogService;
|
|
#endregion
|
|
public MainViewModel(IContainerProvider containerProvider ) : base(containerProvider)
|
|
{
|
|
_containerProvider=containerProvider;
|
|
_postService = containerProvider.Resolve<IPostService>();
|
|
_dialogService = containerProvider.Resolve<IDialogService>();
|
|
InitializeCommands();
|
|
LoadPosts();
|
|
}
|
|
|
|
private void InitializeCommands()
|
|
{
|
|
CreatePostCommand = new DelegateCommand(OnCreatePost);
|
|
SearchCommand = new AsyncDelegateCommand(OnSearch);
|
|
CategorySelectCommand = new AsyncDelegateCommand<string>(OnCategorySelect);
|
|
}
|
|
|
|
#region 命令处理
|
|
|
|
private async void OnCreatePost()
|
|
{
|
|
// 这里可以导航到发帖页面
|
|
ShowInfoMessageBox("跳转到发帖页面",null);
|
|
}
|
|
|
|
private async Task OnSearch()
|
|
{
|
|
// 执行搜索逻辑
|
|
if (!string.IsNullOrWhiteSpace(SearchKeyword))
|
|
{
|
|
await SearchPostsAsync(SearchKeyword);
|
|
}
|
|
}
|
|
|
|
private async Task OnCategorySelect(string category)
|
|
{
|
|
// 按分类筛选帖子
|
|
await FilterPostsByCategoryAsync(category);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 业务方法
|
|
|
|
private async Task LoadPosts()
|
|
{
|
|
try
|
|
{
|
|
var result = await _postService.GetRecommendedPostsAsync(20);
|
|
if (result.IsSuccess)
|
|
{
|
|
Posts = new ObservableCollection<PostEntity>(result.Data);
|
|
}
|
|
else
|
|
{
|
|
ShowErrorMessageBox("帖子加载错误",null);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessageBox($"加载帖子异常: {ex.Message}", null);
|
|
}
|
|
}
|
|
|
|
private async Task SearchPostsAsync(string keyword)
|
|
{
|
|
try
|
|
{
|
|
var result = await _postService.SearchPostsAsync(keyword);
|
|
if (result.IsSuccess)
|
|
{
|
|
Posts = new ObservableCollection<PostEntity>(result.Data);
|
|
}
|
|
else
|
|
{
|
|
ShowErrorMessageBox("查询帖子失败", null);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// 处理异常
|
|
ShowErrorMessageBox($"查询帖子异常: {ex.Message}", null);
|
|
}
|
|
}
|
|
|
|
private async Task FilterPostsByCategoryAsync(string category)
|
|
{
|
|
if (category == "全部")
|
|
{
|
|
await LoadPosts(); // 重新加载所有帖子
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
var result = await _postService.GetPostsByCategoryAsync(category, 20);
|
|
if (result.IsSuccess)
|
|
{
|
|
Posts = new ObservableCollection<PostEntity>(result.Data);
|
|
}
|
|
else
|
|
{
|
|
ShowErrorMessageBox("加载分类子失败", null);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ShowErrorMessageBox($"获取分类帖子异常: {ex.Message}", null);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|