2010-07-04 203 views
0

我是新來的數據綁定,但想完成以下任務:WPF綁定到特定的屬性

我有一個視圖模型具有對象的集合:CollectionOfStuff

每個對象Stuff有一些屬性:NameValue

在我看來,我有一個StackPanel與一些TextBlock s。我想將TextBlock的Text屬性綁定到特定屬性。 (我想結合ValueStuffName是「有些名」)

在我StackPanel我已經設置了DataContext到集合。

但是對於文本塊,當我嘗試... Text="{Binding Path=Value"} ...我只獲得CollectionOfStuff中的第一個對象。當Name是「某個名稱」時,如何選擇性綁定到對象的Value

+0

是「某個名稱」特定於每個文本框? – 2010-07-04 18:10:37

+0

是的,例如一個TextBlock將是標題,所以我基本上需要的東西的對象的值,其中名稱=「標題」 – 2010-07-04 18:11:42

回答

3

想想,從你的描述中,你想使用一個ItemsControl,默認情況下它是由一個StackPanel支持的。它會顯示您的所有項目與給定的模板(我包括一個非常簡單的)。它看起來像這樣:

<ItemsControl ItemsSource="{Binding CollectionOfStuff}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBlock HorizontalAlignment="Left" Text="{Binding Name}" /> 
       <TextBlock HorizontalAlignment="Right" Text="{Binding Value}" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

這就是你想要做的嗎?如果是這樣,請忽略其餘部分。

但是,如果你正在尋找綁定到特定的項目列表中,您將需要確保CollectionOfStuff implents一個this[string index]索引(非常重要的一步)。然後,您可以通過名字來稱呼它:

<StackPanel DataContext="{Binding CollectionOfStuff['theName']}"></StackPanel> 
    <TextBlock HorizontalAlignment="Left" Text="{Binding Name}" /> 
    <TextBlock HorizontalAlignment="Right" Text="{Binding Value}" /> 
</StackPanel> 

如果你要這條路線,但你沒有集合類型的控件CollectionOfStuff是,那麼你總是可以創建自己的索引你的視圖模型:

public object this[string indexer] 
{ 
    get 
    { 
     return CollectionOfStuff.FirstOrDefault(s => s.Name == indexer); 
    } 
} 

然後,你對你的StackPanel的DataContext應該是這樣的:DataContext="{Binding ['theName']}"

我想這一切都取決於,究竟是什麼,你正在試圖做的。你的解決方案是在這個答案的某個地方:)