Windows Phone 应用程序:绑定到页面的 属性
Windows Phone App: Binding to the property of page
我做了一个简单的应用程序来研究绑定过程。有我的代码:
MainPage.xaml
<phone:PhoneApplicationPage
x:Class="PhoneApp1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
x:Name="thisPage">
<StackPanel x:Name="LayoutRoot" Background="Transparent">
<TextBlock
Text="{Binding Path=TestText}"/>
<TextBlock
Text="Saparator"/>
<TextBlock
Text="{Binding ElementName=thisPage, Path=DataContext.TestText}"/>
</StackPanel>
</phone:PhoneApplicationPage>
MainPage.xaml.cs
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneApp1.Resources;
namespace PhoneApp1
{
public partial class MainPage : PhoneApplicationPage
{
public string TestText;
public MainPage()
{
InitializeComponent();
TestText = "It works!";
}
}
}
如您所见,我尝试了两种方法将 TextBlock 控件的 Text 属性 绑定到 MainPage 的 属性。当我尝试 运行 这个应用程序时,我在第一个 TextBlock 和第三个 TextBlock 中都看不到任何文本。
我做错了什么?
谢谢!
您尝试将字段 public string TestText;
替换为 属性 public string TestText {get;set;}
绑定仅适用于 public 属性,例如 public string TestText { get; set; }
但仅添加无济于事,您的 MainPage
将必须实施 INotifyPropertyChanged
接口 (how to),并且您将不得不稍微更改 public 属性对此:
private string _textBackingField;
public string TestText
{
get
{
return _textBackingField;
}
set
{
_textBackingField = value;
NotifyPropertyChanged();
}
}
我做了一个简单的应用程序来研究绑定过程。有我的代码:
MainPage.xaml
<phone:PhoneApplicationPage
x:Class="PhoneApp1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
x:Name="thisPage">
<StackPanel x:Name="LayoutRoot" Background="Transparent">
<TextBlock
Text="{Binding Path=TestText}"/>
<TextBlock
Text="Saparator"/>
<TextBlock
Text="{Binding ElementName=thisPage, Path=DataContext.TestText}"/>
</StackPanel>
</phone:PhoneApplicationPage>
MainPage.xaml.cs
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneApp1.Resources;
namespace PhoneApp1
{
public partial class MainPage : PhoneApplicationPage
{
public string TestText;
public MainPage()
{
InitializeComponent();
TestText = "It works!";
}
}
}
如您所见,我尝试了两种方法将 TextBlock 控件的 Text 属性 绑定到 MainPage 的 属性。当我尝试 运行 这个应用程序时,我在第一个 TextBlock 和第三个 TextBlock 中都看不到任何文本。
我做错了什么?
谢谢!
您尝试将字段 public string TestText;
替换为 属性 public string TestText {get;set;}
绑定仅适用于 public 属性,例如 public string TestText { get; set; }
但仅添加无济于事,您的 MainPage
将必须实施 INotifyPropertyChanged
接口 (how to),并且您将不得不稍微更改 public 属性对此:
private string _textBackingField;
public string TestText
{
get
{
return _textBackingField;
}
set
{
_textBackingField = value;
NotifyPropertyChanged();
}
}