Это гораздо проще, и вы не должны использовать ElementName
(и обычно не рекомендовали бы его, если нет других вариантов работы); вместо этого получить DataContext напрямую, установив его в конструкторе, например.
Если вы используете ElementName
, это означает, что вы пытаетесь получить свойство из именованного элемента. В этом случае Page
. Если бы вы добавили MARK
как свойство экземпляра класса, а не static
, и считая, что экземпляр PhoneApplicationPage
был назван x:Name="Page"
, ваш код должен работать. Уведомления могут не сработать, если значение изменилось, как показано ниже.
public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
this.DataContext = new MARK()
{
Name = "UserName"
};
}
Затем с DataContext правильно создан, вы можете просто обратиться к свойству непосредственно:
<Textblock Text="{Binding Path=Name}"/>
Или используйте ярлык синтаксис, где Path
предполагается:
<Textblock Text="{Binding Name}"/>
Тогда , вы можете создать класс с именем MARK
и добавить свойства, которые вы хотите открыть для привязки, как часть класса. Когда значение свойства изменяется, вам нужно поднять событие, значение которого изменилось. Вы делаете это, используя интерфейс INotifyPropertyChanged
.
// others, plus....
using System.ComponentModel;
using System.Runtime.CompilerServices;
public class MARK : INotifyPropertyChanged
{
private string _name;
public string Name {
get { return _name; }
set {
if (_name != value)
{
_name = value;
RaisePropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
// by using the CallerMemberName attribute, you don't need to specify
// the name of the property, the compiler provides it automatically
private void RaisePropertyChanged([CallerMemberName] string propName = "")
{
if (string.IsNullOrWhiteSpace(propName)) {
throw new ArgumentNullException("propName");
}
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
Это действительно хорошо освещена уже, например, [здесь] (http://msdn.microsoft.com/en-us/library/windowsphone/develop/cc278072 (v = vs.105) .aspx) , – WiredPrairie