主/详细信息绑定MVVM
我在使用图像正确绑定文件夹以掌握详细信息和其他操作时遇到一些问题。 所以,我有文件夹和图像的模型主/详细信息绑定MVVM,mvvm,binding,uwp,master-detail,Mvvm,Binding,Uwp,Master Detail,我在使用图像正确绑定文件夹以掌握详细信息和其他操作时遇到一些问题。 所以,我有文件夹和图像的模型 public class AppFolder { private long id; private List<AppImage> appImages; public AppFolder() { } public List<AppImage> AppImages { get => appImages; set => appImag
public class AppFolder
{
private long id;
private List<AppImage> appImages;
public AppFolder() { }
public List<AppImage> AppImages { get => appImages; set => appImages = value; }
public long Id { get => id; set => id = value; }
}
public class AppImage
{
private int id;
private string title;
private ImageSource appImageURL;
public AppImage() { }
public AppImage(string title, ImageSource imageSource)
{
Title = title;
AppImageURL = imageSource;
}
public int Id { get => id; set => id = value; }
public string Title { get => title; set => title = value; }
public ImageSource AppImageURL { get => appImageURL; set => appImageURL = value; }
}
公共类AppFolder
{
私人长id;
私人名单
看起来不错,我觉得一切都好。
但当我想从MVVM模型中添加事件并选择EdItem到AdaptiveGridView时,我发现它没有看到它们。Visual Studio向我展示了我可以将它们写入模型“AppFolder”中,但它是不存在的
所以,我的问题是:如何从UserPhotosViewModel向自适应网格添加事件(绑定命令/方法)
谢谢你抽出时间
更新
2) 用户双击图像和程序发送文件夹,将此图像和其他图像发送到页面,并将其绑定到FlipView(模拟全屏查看器)
我尝试添加,但这种方式也提供了在模型中写入事件和属性的功能。我在导航面板(主/详细信息的父控件)中使用这种方式进行设置
只需在AppFolder
类中添加命令属性,如下所示:
public类AppFolder:ViewModelBase
{
私人长id;
私有图像列表;
公用AppFolder(){}
公共列表AppImages{get=>AppImages;set=>AppImages=value;}
公共长Id{get=>Id;set=>Id=value;}
公共RelayCommand RelayCommand{get;set;}
}
然后,在UserPhotosViewModel
中,可以声明初始化此命令的方法
因为我不知道什么是dataService.GetDataList()
,所以我只需更改代码中的这个位置,并为您制作一个简单的代码示例
private void Initialize()
{
var item=新列表();
尝试
{
列表ls=新列表();
添加(新的AppImage(){Id=1,Title=“aaa”,AppImageURL=new-BitmapImage(新的Uri(“ms”)-appx:///Assets/1.jpg")) });
Add(new-AppImage(){Id=2,Title=“bbb”,AppImageURL=new-BitmapImage(新的Uri(“ms”)-appx:///Assets/2.jpg")) });
Add(new-AppFolder(){Id=1,AppImages=ls,relayCommand=new-relayCommand(DoubleTapCommand)});
FolderList=项目;
}
捕获(例外情况除外)
{
}
}
专用void doubletap命令(对象obj)
{
//obj将是一个AppFolder对象
}
1) 用户选择N个图像并删除它们(示例)
关于这个要求,我建议您最好添加一个按钮来绑定用于删除所选项目的命令。我不清楚您想要实现什么。您能发布“不工作”吗帮助我们理解的代码?您在UWP中尝试过吗?@MartinZikmund我尝试为AdaptiveGridView添加双击事件和所选项目,以便与图像交互。1)用户选择N个图像并删除它们(示例)2)用户双击图像和程序发送文件夹以及此图像和其他到页面,并将它们绑定到FlipView(模拟全屏查看器)当VS提供文件夹中的方法或属性时,我在post中添加屏幕model@XavierXie-MSFT是的,我尝试添加,但这种方式也提供在模型中写入事件和属性。我使用这种方式在导航面板(主控/详细信息的父控件)中进行设置。非常感谢,这对我有帮助!
public class UserPhotosViewModel : ViewModelBase
{
private readonly IDataService dataService;
private readonly INavigationService navigationService;
public UserPhotosViewModel(IDataService dataService, INavigationService navigationService)
{
this.dataService = dataService;
this.navigationService = navigationService;
Initialize();
}
private async Task Initialize()
{
var item = new List<AppFolder>();
try
{
item = await dataService.GetDataList();
FolderList = item;
}
catch (Exception ex)
{
}
}
private List<AppFolder> folderList;
public List<AppFolder> FolderList
{
get { return folderList; }
set
{
folderList = value;
RaisePropertyChanged(nameof(FolderList));
}
}
}
<controls:MasterDetailsView ItemsSource="{Binding FolderList}">
<controls:MasterDetailsView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Id}"></TextBlock>
</DataTemplate>
</controls:MasterDetailsView.ItemTemplate>
<controls:MasterDetailsView.DetailsTemplate>
<DataTemplate>
<controls:AdaptiveGridView ItemsSource="{Binding AppImages}"
OneRowModeEnabled="False"
ItemHeight="205"
DesiredWidth="205"
SelectionMode="Multiple"
Margin="0 6 0 0"
>
<controls:AdaptiveGridView.ItemTemplate>
<DataTemplate >
<Grid Background="White" Margin="10">
<Image
Source="{Binding AppImageURL}"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Stretch="Uniform"
/>
<TextBlock Text="{Binding TextTitle}"></TextBlock>
</Grid>
</DataTemplate>
</controls:AdaptiveGridView.ItemTemplate>
</controls:AdaptiveGridView>
</DataTemplate>
</controls:MasterDetailsView.DetailsTemplate>
</controls:MasterDetailsView>