为 gridview 数据模板设置 x:数据类型
本文关键字:数据类型 设置 gridview 数据 | 更新日期: 2023-09-27 18:33:45
>我有一个GridView
<GridView ItemsSource="{x:Bind ViewModel.SoundEffects}">
<GridView.ItemTemplate>
<DataTemplate x:dataType="?">
<Button Style="{StaticResource defaultButton}"
Content="{Binding Name}"
Tag="{Binding FileName}"
Command="{x:Bind ViewModel.PlayCommand}"
CommandParameter="{Binding FileName}"/>
</DataTemplate>
</GridView.ItemTemplate>
每当我尝试编译它时,它都说我需要指定一个模型,但是当我尝试创建接口时,我不知道如何制作包含 ViewModel 定义的模型:
public interface ISoundEffectButton
{
string Name { get; }
string FileName { get; }
ViewModels.MainPageViewModel ViewModel { get; }
}
但这不起作用,并使整个调试器崩溃。
谢谢你的时间。
在 DataTemplate(无论是用作项模板、内容模板还是标头模板)中,Path 的值不是在页面上下文中解释的,而是在要模板化的数据对象的上下文中解释的。为了在编译时可以验证其绑定(并为它们生成有效的代码),DataTemplate 需要使用 x:DataType 声明其数据对象的类型。
所以首先,你需要让你的模型像这样:
public class SoundEffectButton
{
public string Name { get; set;}
public string FileName { get; set;}
public ICommand Play { get; set; }
}
它是一个Class
,而不是一个接口。然后在您的页面中使用它,如下所示:
xmlns:data="using:[the namespace of your model]
GridView
的x:DataType
可以设置如下:
<DataTemplate x:DataType="data:SoundEffectButton">
在 ViewModel 中,您可以对数据使用集合:
public ObservableCollection<SoundEffectButton> SoundEffects;
最后,在页面的 cs 文件中使用您的 ViewModel:
public MainPage()
{
this.InitializeComponent();
ViewModel = new MainPageViewModel();
}
public MainPageViewModel ViewModel { get; set; }
GridView
应该是这样的:
<GridView ItemsSource="{x:Bind ViewModel.SoundEffects}">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:SoundEffectButton">
<Button Style="{StaticResource defaultButton}"
Content="{Binding Name}"
Tag="{Binding FileName}"
Command="{x:Bind Play}"
CommandParameter="{Binding FileName}" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
我在这里为您的问题写了一个演示,您可以看看。