现在的位置: 首页 > 综合 > 正文

A damn at han’s Windows phone book 笔记(6:page navigation & data binding)

2013年08月05日 ⁄ 综合 ⁄ 共 2140字 ⁄ 字号 评论关闭

NavigationService

用Navigate打开某一页:

this.NavigationService.Navigate(new Uri(“/InstructionsPage.xaml”,UriKind.Relative));

还可以用GoBack和GoForward打开某一页。

用GoBack和GoForward打开的是之前打开过的那个页面的实例,但是用Navigate打开的就是一个新实例了。

 

不要出现back和forward按钮,back有物理按钮,forward没有必要。GoForward会将当前页压入back stack,并清空forward stack。

如果要特意强调可以取消,可以用取消按钮。

image

 

页面间传递数据

1. 静态变量。

2. query string: 用携带的参数传递数据,限制:只能向前传,无法向后传,参数要方便用字符串表达。

this.NavigationService.Navigate(

new Uri(“/DetailsPage.xaml?categoryIndex=” + this.categoryIndex + “&signIndex=” + this.ListBox.SelectedIndex, UriKind.Relative));

给参数赋值

if (this.NavigationContext.QueryString.ContainsKey(“categoryIndex”)) 是否包含某个参数

int.Parse(this.NavigationContext.QueryString[“categoryIndex”]) 解析出参数

 

Data Binding

可以先在xaml中设置好绑定,C#代码中给DataContext赋值来完成绑定。

例如:this.DataContext = sign;

DataContext的类型是object,所以可以用任何一个对象为其赋值。页面上的子元素会继承其父元素的DataContext。

另外,有ItemSource属性绑定起来比较简单。

例如:

foreach (Sign sign in Data.Categories[this.categoryIndex].Signs)
{

    this.ListBox.Items.Add(sign);

}

因为ListBox有ItemSource属性,因此可以如下调用:

this.ListBox.ItemsSource = Data.Categories;

 

INotifyPropertyChanged接口

绑定对象的某个属性使其UI自动更新,要让该对象的类别实现INotifyPropertyChanged接口,方法如下:

public class UserInfo : INotifyPropertyChanged
{
    public string UserName { get; set; }

    private int age;
    public int Age
    {
        get
        {
            return this.age;
        }
        set
        {
            if (this.age != value)
            {
                this.age = value;
                OnPropertyChanged("Age");
            }
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion
}

更多数据绑定的知识,参考http://www.cnblogs.com/Jax/archive/2009/10/13/1582128.html

 

图片的Strech属性

image

 

Uri什么时候该以/开头

Navigation URI 必须有

指向BuitldAction=Resource的资源文件的URI 必须没有

指向BuitldAction=Content的资源文件的URI 有没有都行

可以简单记:Navigation URI有,资源文件没有。

 

每个App都应该有个About Page

获得版本号的方法:

try
{
    string s = typeof(AboutPage).Assembly.ToString();
    // s形如:WindowsPhoneApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    if (s != null && s.IndexOf("Version=") >= 0)
    {
        s = s.Substring(s.IndexOf("Version=") + "Version=".Length);
        s = s.Substring(0, s.IndexOf(","));
        this.VersionTextBlock.Text = "version " + s;
    }
}
catch { /* Never mind! */ }

这样就只需更改程序集的版本号,用户看到的版本号也会自动更新了。

【上篇】
【下篇】

抱歉!评论已关闭.