做了一個簡單的測試項目中,我嘗試綁定到在原一的XmlDataSource視圖模型綁定到XMLDataProvider
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>
如果我不是改變的DataContext到
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上
如果我把屬性上的斷點報告我可以看到它是calle當我做{綁定報告}但列表仍然是空的。
UPDATE
我能做到這一點的代碼綁定,然後它的作品
Binding binding = new Binding();
binding.Source = _myViewModel.Reports;
binding.XPath = @"Reports/Report";
TeamsListBox.SetBinding(ListBox.ItemsSourceProperty, binding);
爲什麼不能我做,在XAML
從您的代碼:'this.DataContext = _myViewModel.Person'什麼'Person'屬性?我沒有在你的視圖模型上看到它。你是說'_myViewModel.Reports'? – nemesv 2012-01-03 21:31:59
對不起,將其更改爲Reports。這是在原代碼 – klashagelqvist 2012-01-04 09:44:46
報告它可以與xmldatasource不是IEnumberable有關。但如果是這樣的話,當我設置datacontext它的作品,那麼必須有一些自動轉換在後臺進行 – klashagelqvist 2012-01-04 11:50:49