如何从UWP中的DataTemplate获取模型?

时间:2018-08-15 13:52:35

标签: uwp

我想创建一个列表视图,其中有几个按钮。每个按钮代表一个网站名称。单击该按钮然后访问该网站。

这是XAML:

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <ListView Name="WebsiteListView">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="local:WebsiteModel">
                    <Button Content="{x:Bind WebsiteName}" Click="Button_Click"></Button>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Page>

这是WebsiteModel的模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace App1
{
    class WebsiteModel
    {
        public string WebsiteName { get; set; }
        public string WebsiteURL { get; set; }
    }
}

最后是代码隐藏:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;

    namespace App1
    {
        public sealed partial class MainPage : Page
        {
            List<WebsiteModel> WebsiteModelList = new List<WebsiteModel>();
            public MainPage()
            {
                this.InitializeComponent();
                WebsiteModelList.Add(new WebsiteModel() { WebsiteName = "Google", WebsiteURL = "https://www.google.com" });
                WebsiteModelList.Add(new WebsiteModel() { WebsiteName = "StackOverFlow", WebsiteURL = "https://stackoverflow.com" });
                WebsiteListView.ItemsSource = WebsiteModelList;
            }



     private void Button_Click(object sender, RoutedEventArgs e)
        {

        }
    }
}

现在的问题是,当单击按钮时,我应该获得WebsiteURL然后访问URL。但是我找不到找到模型并进一步从模型中获得WebsiteURL的方法。

有什么办法吗?或者我的方法是完全错误的,还有更好的办法吗?谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用Tag的{​​{1}}属性,然后从后面的代码中访问该属性的值。

这是有关此操作的示例。

Xaml:

Button

代码背后:

 <Button Content="{x:Bind WebsiteName}" Tag="{x:Bind WebsiteURL}" Click="Button_Click"></Button>

答案 1 :(得分:1)

只需将DataContext中的Button强制转换为WebsiteModel,您将可以访问其任何属性:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Button btn = (Button)sender;
    WebsiteModel model = btn.DataContext as WebsiteModel;
    if (model != null)
    {
        string websiteURL = model.WebsiteURL;
    }
}