2011-05-06 48 views
0

我有Dockpanels的列表框哪個顯示「字段名:,[_ ____](用戶輸入的文本框)」。在用戶填充字段之後,我正在尋找一種LINQ方法來獲取這些對並將它們扔到一個KeyValuePair對象中。的DataTemplate到LINQ

 <DataTemplate x:Key="ExtraLoginInfoTemplate"> 
        <DockPanel> 
         <TextBlock Name="CodeID" Text="{Binding Path=ID,Converter={BLL:CodeMarkupExtension}}" /> 
         <TextBox Name="Input"/> 
        </DockPanel> 
       </DataTemplate> 

    <ListBox Name="extraLoginInfoListBox" ItemsSource="{Binding}" ItemTemplate="{StaticResource ExtraLoginInfoTemplate}"/> 

    //codebehind 

extraLoginInfoListBox.DataContext = cvList; //list of codevalue objects 

private void submitButton_click(object sender, RoutedEventArgs e) 
{ 
    KeyValuePair<string,string> myInputs = /* ? some linq query to get the data from extraLoginInfoListBox */ 

} 
+1

它d看起來你沒有在你的列表框中設置雙向綁定,而在你的模板上爲輸入設置了綁定。如果你這樣做,那麼你的數據源會自動更新值,然後你可以很容易地從你的'cvList'對象通過linq查詢。 – Tejs 2011-05-06 18:25:10

回答

1

你需要的屬性與您輸入文本框來存儲任何值是由用戶輸入的約束:

<TextBox Name="Input" Text="{Binding Path=IDValue, Mode=TwoWay}" /> 

然後,你可以使用下面的代碼:

var keyValuePairs = cvList.ToDictionary((obj) => obj.ID, (obj) => obj.IDValue);