2011-11-22 32 views
1

從來就得到了兩個班,HandyHandyRepository(It's帶有編號,姓名和年份型號)。WPF綁定倉庫和型號

我HandyRepository看起來是這樣的:

private IList<Handy> list = new List<Handy>(new Handy[] { 
     new Handy{ ID=1, Name="Nokia ", Jahr=1999}, 
     new Handy{ ID=2, Name="HTC m", Jahr=2333}, 
     new Handy{ ID=3, Name="Samsung", Jahr=2134} }); 


    public IEnumerable<Handy> GetList() 
    { 
     return this.list; 
    } 

現在,我想這些數據在我的WPF應用程序列表框,而不在代碼隱藏文件編寫任何代碼。

我嘗試:

xmlns:local="clr-namespace:Handy" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.DataContext> 
     <local:Handy></local:Handy> 
    </Grid.DataContext> 

    <ListBox Name="lbBinding" ItemsSource="{Binding Name}"></ListBox> 
</Grid> 

這doesn't工作。在推理中我有一個基本的錯誤嗎?我怎麼解決這個問題?

回答

1

您還沒有設法的ItemsSource綁定到實際徵收。首先,你需要做一個集合,並給它一個關鍵,通過它可以識別:

<x:Array x:Key="HandyList" Type="{x:Type local:Handy}"> 
    <local:Handy Name="Nokia " Jahr="1999" ID="1" /> 
    <local:Handy Name="HTC m", Jahr="2333" ID="2" /> 
</x:Array> 

該鍵可以是你喜歡的任何標識符。

然後,你需要告訴列表框查找該鍵:

<ListBox ItemsSource="{StaticResource HandyList}" Name="lbBinding" /> 

不幸的是,這將不會呈現完全正確,你將得到默認的ToString()出現在手持類列表框,所以你需要告訴它如何渲染:

<ListBox ItemsSource="{StaticResource HandyList}" 
     Name="lbBinding" 
     DisplayMemberPath="Name" /> 

這將確保它使用Name屬性作爲字符串的源列表框來呈現。如果您需要,您可以通過提供自定義DataTemplate來進行更復雜的渲染。

當然,也有你定義在XAML你的ItemsSource幾個現實世界的應用。綁定到視圖的DataContext屬性更爲正常。要做到這一點,最簡單的方法是將一個屬性在其代碼隱藏添加到視圖本身:

public List<Handy> HandyList { get; set; } 

然後設置視圖是其自身的DataContext在它的構造函數,調用的InitializeComponent()後:

DataContext = this; 

然後你可以在XAML綁定的ItemsSource爲{綁定路徑= HandyList}。不要忘了構建列表並填充它,當然...

+0

+1 - 打我給它。 – ChrisBD

+0

只是看着它而已! –

+0

ItemsSource屬性告訴我,{「‘Handy.HandyModel’不是財產‘的ItemsSource’。一個有效值」} – user896692