2013-07-25 14 views
0

我有這樣的代碼:查找一個DataTemplate內的文本框的內容具有多個行

<StackPanel> 
<ItemsControl ItemsSource="{Binding Position}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="2*" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="80" /> 
       </Grid.ColumnDefinitions> 
       <TextBox Grid.Column="0" Text="{Binding Name}" Margin="5" /> 
       <TextBox Grid.Column="3" Text="{Binding ID}" Margin="5" /> 
       <Button Grid.Column="4" Content="X" Click="Delete" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

例如我有3行。我想用它的元素刪除第二行。我點擊第二行中的Delete按鈕,我需要的是TextBox中的ID。如果我在後面的代碼中獲得ID,我可以從數據庫中刪除該位置。如果我只有一行,沒有問題。在這種情況下,我給出了包含ID的文本框的名稱,我可以在後面的代碼中獲取值。但是,如果我有3,4,10位置,他們每個人在一個單獨的行嗎?

+0

不要使用'Click'的活動,但綁定一個'命令「到你的視圖模型,就像你綁定'ID'和'Name',並在那裏處理 – dkozl

+0

[this](http://stackoverflow.com/questions/16864502/using-events-and-commands-within- itemscontrol-in-wpf)問題地址非常類似的問題 – dkozl

+0

如果正確進行UI修改,將修改Datamodel而不是數據素材內容UI將反映出來。 –

回答

0

你可以綁定按鈕的TagID財產和訪問,在Click處理:

<Button Grid.Column="4" Content="X" Click="Delete" Tag="{Binding ID}" /> 

Click處理程序:

private void Delete(object sender, RoutedEventArgs e) 
{ 
    var button = (Button)sender; 
    var id = (int)button.Tag; 
    // ... 
} 
+0

謝謝。我只做了一點小改變。由於'ID'返回'int',我在'int'中轉換標籤而不是'string' – Georg

+0

這就是我最初寫的,然後我認爲ID可能是一個字符串:-)我已經更新了答案。 – Clemens

相關問題