Я довольно плохо знаком с WPF, и я пытаюсь загрузить окно XAML и передать переменную этому XAML в его конструкторе или так, потому что мне нужен он для загрузки некоторых объектов из этой переданной переменной.
Кто-либо мог указать на меня на направление того, как пойти об этом? Как каждый запускает окно XAML и дает ему переменную?
Заранее спасибо.. Erika
Моя проблема заключалась в том, что я хотел получить доступ к классу за пределами окна XAML, а не связываться с относительным кодом через привязку. Для этого все, что мне нужно было сделать, это создать статический класс для хранения требуемого значения. Просто, но в тот момент решение ускользнуло от меня. Это довольно грязный способ решения проблемы, но он делает свое дело.
Я хотел бы поблагодарить обоих участников, которые помогли мне понять архитектуру MVVM, поскольку раньше я этого не понимал.
Большое спасибо за быстрый ответ и извините, если мой вопрос был легко неправильно понят! Иногда я не очень хорошо передаю свои идеи ..
Обычно в WPF вы создаете элементы, которые хотите загрузить, и устанавливаете DataContext окна (или UserControl) в класс, содержащий ваши элементы. Затем вы можете выполнить привязку напрямую к ним, чтобы выполнять настраиваемое отображение из XAML.
Если вы хотите узнать больше о MVVM, ознакомьтесь с этим (MVVM действительно мощный и отличный способ разработки тестируемого кода):
http://msdn.microsoft.com/en-us/magazine /dd419663.aspx
Это должно дать вам очень хорошее представление о MVVM. Пример, который вы можете скачать, находится под заголовком, где написано: «Загрузка кода доступна из галереи кода MSDN».
Попробуйте использовать паттерн MVVM (Model-View-ViewModel).
Вам нужна Model:
class Person
{
public string Name { get; set; }
}
View - это ваше окно или 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/) фреймворки, но они более сложные.