У меня проблема с правильной реализацией привязки данных с MVVM и ComboBox
.У меня есть простая модель:
public class RuleSet
{
public List<RuleMainSystem> RuleMainSystems { get; set; }
public RuleSet()
{
RuleMainSystems = new List<RuleMainSystem>();
}
}
И в ней это выглядит так:
public class RuleMainSystem
{
public string Name { get; set; }
public List<RuleSubSystem> RuleSubSystems { get; set; }
public RuleMainSystem(string name)
{
Name = name;
RuleSubSystems = new List<RuleSubSystem>();
}
}
Теперь я хочу простую привязку со страницы, частью которой является ComboBox
, аItemSource
из этого ComboBox
будет установлено на этот RuleSet
.Я пытался привязать напрямую к ViewModel, но этот удаляется из оперативной памяти, как только я перехожу на другой сайт, и я хочу избежать максимально возможного static
, поэтому я создал экземпляр этой ViewModel наПервый сайт и дать его на второй странице в качестве параметра.Пока это хорошо работает, но теперь мне придется привязать ComboBox
к this._editRulesViewModel.RuleSet.RuleMainSystems
, и именно здесь я не могу получить правильный код.Может быть, я подхожу к этому не с той стороны?Предложение, как я мог бы получить доступ к данным с одного сайта на другой, не передавая целые экземпляры от А до Б к С и т. Д.
Это не работает:
Просмотр:
public sealed partial class EditRules
{
private EditRulesViewModel _editRulesViewModel;
public EditRules()
{
DataContext = this;
InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
_editRulesViewModel = (EditRulesViewModel)e.Parameter;
}
}
И в XAML:
<ComboBox x:Name="MainSystemComboBox" DisplayMemberPath="Name" ItemsSource="_editRulesViewModel.RuleSet.RuleMainSystems" />
Я имею в виду, да, данные поступают на вторую страницу, но Binding
неверно.Да, и я также попытался установить DataContext в определении страницы XAML:
DataContext="{Binding RelativeSource={RelativeSource Self}}"