2013-11-30 2 views
2

Я создаю приложение WP8 с использованием C#.Связывание данных между 2 файлами XAML

У меня есть 2 XAML файлы, представляющие 2 страницы: MainPage и InfoPage

Я хочу название заголовка для обоих страницы, чтобы быть таким же.

Так название заголовка для MainPage установлен в положение «MyApp»

Теперь, можно связать название заголовка для InfoPage к одному в MainPage? Так что оба XAML имеют «MyApp» в качестве заголовка заголовка.

Если это невозможно, то почему?

Благодаря

+0

Это возможно. Используйте «Локатор» в качестве контекста данных для этого конкретного элемента на обеих страницах. – MarcinJuraszek

+0

Я нашел решение.Я добавил строку для названия в «AppResources.resx» с помощью конструктора. Затем я связываю «TextBlock» с ним через «LocalizedStrings.cs». Я попробовал привязать прямо к 'AppResources.resx', добавив datacontext в' XAML', но это дает мне ошибку «XamlParseException». Не знаю, почему ... – LokmanLuke

+0

@LokmanLuke Я добавил решение, в котором показано, как использовать переменные из AppResources.resx. – Romasz

ответ

0

Согласно вашему комментарию использовать LocalizedResources через xaml у вас есть Binding Path и покажите, какой класс использовать, например, это будет работать
В App.xaml добавить ключ, который указывает на ваш класс LocalizedStrings:

<Application.Resources xmlns:my="clr-namespace:NameSpaceWhereLocalizedStrings"> 
    <my:LocalizedStrings x:Key="Localized"/> 
</Application.Resources> 

clr-namespace: - это пространство имен, в котором у вас есть LocalizedStrings (возможно, ваше основное пространство имен). Затем вы можете использовать в любом другом XAML файл ваших LocalizedResources:

<TextBlock Text="{Binding LocalizedResources.appName, Source={StaticResource Localized}}"/> 

APPNAME - это переменный в AppResources.resx (проверки, конечно, если он открытый). LocalizedResources это класс, который вы, вероятно, по умолчанию в LocalizedStrings.cs:

public class LocalizedStrings 
{ 
    private static AppResources _localizedResources = new AppResources(); 
    public AppResources LocalizedResources { get { return _localizedResources; } } 
} 

Локализованные ресурсы очень полезны, потому что с ними вы можете локализовать приложения, так что пользователи могут иметь свои ресурсы на разных языках MSDN. Есть также гораздо больше блогов и сайтов, где вы можете найти больше.

+0

Это замечательно. Спасибо за объяснение – LokmanLuke

+0

@LokmanLuke Если есть решение, которое решило вашу проблему, не забудьте отметить это как ответ :) – Romasz

1

Да создать вспомогательный класс, который хранит переменную и запускающее событие изменения свойства. Затем создайте статический объект класса-помощника в основной или инфо-папке.

Так, чтобы вызвать свойство привязки.

public class BindHelper: INotifyPropertyChanged 
{ 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void PropertyChanged(string info) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 


     string _title; 
     public string Title 
     { 
      get 
      { 
       return _title; 
      } 
      set 
      { 
       _title= value; 
       PropertyChanged("Title"); 
      } 
     } 
} 

Тогда в основном объявите объект, очень простой пример.

public static BindHelper binder = new BindHelper(); 
binder.Title = "My Title"; 

Изменение с информационной страницы:

MainWindow.binder.Title = "Something Else"; 

Тогда просто сделать то же свойство связывания и DataContext настройки в обоих. Для Инфостраницы просто установить:

control.DataContext = MainWindow.binder; 
+0

Я пропустил это для WP8, не уверен, что он там действует. Я удалю, если не релевантно. –

+0

Это полезный метод. Спасибо – LokmanLuke

1

вы можете добиться этого с помощью создания стиля в App.xaml

<Style x:Key="PageHeaderTitleTextBlock" TargetType="TextBlock"> 
     <Setter Property="Text" Value="My App" /> 

    </Style> 

и установить стиль в обеих страницах

+0

Хорошая идея. Очень полезно, действительно, – LokmanLuke

+0

@LokmanLuke затем утверждают и повышают цену, поэтому можно использовать это – techloverr

+0

Как видите, у меня есть только 1 репутация :( – LokmanLuke

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