为 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; } 
}

但这不起作用,并使整个调试器崩溃。

谢谢你的时间。

为 gridview 数据模板设置 x:数据类型

在 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]

GridViewx: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>

我在这里为您的问题写了一个演示,您可以看看。