XAML и WPF - передача переменных в Windows XAML - PullRequest
4 голосов
/ 31 марта 2010

Я довольно новичок в WPF и пытаюсь загрузить окно XAML и передать переменную этому XAML в его конструкторе или около того, потому что он мне нужен для загрузки некоторых элементов из этой переданной переменной.

Может ли кто-нибудь указать мне, как это сделать, пожалуйста? Как запустить окно XAML и присвоить ему переменную, пожалуйста?

Спасибо заранее .. Erika

Ответы [ 4 ]

8 голосов
/ 31 марта 2010

Попробуйте использовать шаблон MVVM (Model-View-ViewModel).

Вам нужна модель:

class Person
{
    public string Name { get; set; }
}

Вид - это ваше окно или UserControl.

ViewModel может быть примерно таким:

class PersonViewModel : INotifyPropertyChanged
{
 private Person Model;
 public ViewModel(Person model)
 {
  this.Model = model;
 }

 public string Name
 {
  get { return Model.Name; }
  set
  {
   Model.Name = value;
   OnPropertyChanged("Name");
  }
 }

 public event PropertyChangedEventHandler PropertyChanged;
 private void OnPropertyChanged(string propertyName)
 {
  var e = new PropertyChangedEventArgs(propertyName);
  PropertyChangedEventHandler changed = PropertyChanged;
  if (changed != null) changed(this, e);
 }
}

Затем вам нужно указать DataContext для вашего окна:

View.DataContext = new PersonViewModel(somePerson);

А затем определите привязки в XAML:

<UserControl x:Class="SomeApp.View"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
<Grid>
    <TextBlock Text="{Binding Name}" />
<Grid>    
<UserControl>

MVVM делает код очень элегантным и простым.

Вы также можете попробовать PRISM или Caliburn (http://caliburn.codeplex.com/) рамки, но они более сложные.

2 голосов
/ 31 марта 2010

Как правило, в WPF вы создаете элементы, которые хотите загрузить, и устанавливаете DataContext в Window (или UserControl) на класс, содержащий ваши элементы. Затем вы можете привязать их напрямую к XAML.

1 голос
/ 31 марта 2010

Моя проблема заключалась в том, что я хотел получить доступ к классу за пределами окна XAML, а не связываться с соответствующим кодом через Binding. Для этого все, что мне нужно было сделать, это создать статический класс для хранения требуемого значения. Простое, но решение ускользнуло от меня в тот момент. Это довольно грязный способ решения проблемы, но он делает свое дело.

Я хотел бы поблагодарить обоих участников, которые помогли мне понять архитектуру MVVM, поскольку раньше я этого не понимал.

Большое спасибо за быстрый ответ и извините, если мой вопрос был легко понят! Иногда я не очень хорош в передаче моих идей ..

0 голосов
/ 31 марта 2010

Если вы хотите узнать больше о MVVM, проверьте это (MVVM действительно мощный и отличный способ разработки тестируемого кода):

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Это должно дать вам очень хорошее представление о MVVM. Пример, который вы можете скачать, находится под заголовком, где написано: Загрузка кода доступна из галереи кодов MSDN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...