Сделан простой тестовый проект, в котором я пытаюсь привязаться к источнику xmldatasource в прототипной модели представления
public partial class Window1 : Window
{
//private XmlDataProvider _provider = new XmlDataProvider();
private MyViewModel _myViewModel = new MyViewModel();
public Window1()
{
InitializeComponent();
this.DataContext = _myViewModel ;
}
}
public class MyViewModel
{
public MyViewModel()
{
LoadXMLData();
}
private XmlDataProvider _provider = new XmlDataProvider();
public XmlDataProvider Reports
{
get { return _provider; }
set { _provider = value; }
}
private void LoadXMLData()
{
string filePath = Directory.GetCurrentDirectory() + @"\Reports2.xml";
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(filePath);
_provider.Document = doc;
_provider.XPath = @"Reports/Report";
}
}
Если я попытаюсь привязать список, как это. Я ничего не получаю
<ListBox x:Name="TeamsListBox" Margin="0,0,0,20" DockPanel.Dock="Left"
ItemsSource="{Binding Reports}"
ItemTemplate="{StaticResource teamItemTemplate}"
IsSynchronizedWithCurrentItem="True"
Visibility="Visible" SelectionMode="Single">
</ListBox>
Если я вместо этого изменю текст данных на
this.DataContext = _myViewModel.Reports
И список на
<ListBox x:Name="TeamsListBox" Margin="0,0,0,20" DockPanel.Dock="Left"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource teamItemTemplate}"
IsSynchronizedWithCurrentItem="True"
Visibility="Visible" SelectionMode="Single">
</ListBox>
Тогда это работает, как мне привязаться к модели представления, чтобы я мог заполнить ее больше, чем просто в xmldatasource
Если я поставлю точку останова в свойстве Report, я смогу увидеть, что она вызывается, когда я выполняю {Binding Reports}, но список все еще пуст.
UPDATE
Я могу сделать эту привязку в коде, и тогда она будет работать
Binding binding = new Binding();
binding.Source = _myViewModel.Reports;
binding.XPath = @"Reports/Report";
TeamsListBox.SetBinding(ListBox.ItemsSourceProperty, binding);
Почему я не могу сделать это в XAML