2014-02-16 4 views
0

Я хотел бы реализовать автоматическое обновление привязки в моем приложении WP8. Все, что я хочу, - связать свойство String класса с текстовым блоком, но оно не работает так долго, я не привязываю строку напрямую без класса.Невозможно связать свойство string в WP8 App

TextBlock:

<Textblock Text="{Binding Path=MARK1._mark, ElementName=Page, Mode=OneWay}"/> 

Определение mark1:

public partial class MainPage : PhoneApplicationPage 
{ 
public static MARK MARK1 = new MARK("example") 
public MainPage(){} //constructor 
} 

я реализовал класс MARK как this example в том же пространстве имен, как и остальные. _mark представляет имя_пользователя.

Если кто-то может дать мне несколько советов о том, как заставить его работать, я бы очень благодарен.

EDIT: Я теперь попробовал все, что было предложено в этом посте, но он все еще не работает. Возможно, это помогает кому-то идентифицировать проблему, когда я привязываю строку, которая не входит в класс, она работает.

+0

Это действительно хорошо освещена уже, например, [здесь] (http://msdn.microsoft.com/en-us/library/windowsphone/develop/cc278072 (v = vs.105) .aspx) , – WiredPrairie

ответ

0

Как вы устанавливаете datacontext.

Первый набор данных. Если вы не устанавливаете datacontext в xaml, тогда установите его в codebehind.

this.DataContext = this; 

Надеется, что это помогает ....

+0

Где я должен это поставить? Где-то в классе MainPage? – user3316154

+0

Теперь вы можете искать эту вещь. Я дал вам след. – pan4321

+0

@ user3316154 Одно место - поместить его в конструктор после InitializeComponent() –

1

Это гораздо проще, и вы не должны использовать 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)); 
     } 
    } 
} 
+0

Для меня, даже когда я устанавливаю его как Datacontext, он все равно не будет работать, единственный способ, которым я могу связать что-то, - создать строку непосредственно в частичный класс MainPage и ссылающийся на имя указанной строки, но затем я не могу обновить привязку. – user3316154

+0

Вы следовали моим инструкциям? В новом проекте? – WiredPrairie

Смежные вопросы