2014-01-20 36 views
0

我想在數據網格中有一個路徑。我寫了下面的數據模板:訪問DataGridTemplateColumn

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="auto" /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Text="{Binding AlertProgram}" IsEnabled="False" Grid.Column="0" /> 
       <Button Content="..." Grid.Column="1" Click="Button_browse_alert_program" /> 
      </Grid> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

(我寫它直入<DataGrid.columns> elelment)

在功能Button_browse_alert_program我打開一個打開文件對話框,以獲取文件。

我的問題是 - 我無法訪問文本框。我試着用x:Name="someName"給它起一個名字,但是編譯器抱怨這個名字不存在。

我看到下面的SO問題:How to access datagrid template column textbox text WPF C#How to access control in DataGridTemplateColumn to get value?

有沒有辦法做到這一點無需第三方軟件,並沒有寫我自己FindChild功能?

(我很新的WPF,所以如果你有在我的代碼的其他意見 - 說話)

回答

0

通過sender訪問DataConext爲什麼你會做這些?爲什麼選擇第三方軟件?

看看這個:

<DataGrid x:Name="dG"> 
     <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="auto" /> 
          </Grid.ColumnDefinitions> 
          <TextBox x:Name="tbx">test</TextBox> 
          <Button Content="click me" Grid.Column="1" Click="OnClick" /> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
     <DataGrid.ItemsSource> 
      test 
     </DataGrid.ItemsSource> 
    </DataGrid> 

這是後面的代碼:

private void OnClick(object sender, RoutedEventArgs e) 
    { 
     TextBox tbx = null; 
     // grid is a panel, panels have children 
     var parent = VisualTreeHelper.GetParent((DependencyObject)sender) as Panel; 
     foreach(var child in parent.Children) 
     { 
      if (child is TextBox) 
      { 
       tbx = (TextBox)child; 
       break; 
      } 
     } 

     // you should check if tbx != null 
     tbx.Text = "Hello"; 
    } 
0

從技術上講,你應該有一些ICommand實施,結合Button.Command你的視圖模型,做你想要什麼有,但如果你固定在做這種方式,那麼你可以在Button_browse_alert_program

private void Button_browse_alert_program(object sender, RoutedEventArgs e) 
{ 
    var value = ((sender as Button).DataContext as MyItemClass).AlertProgram; 
}