2017-01-30 5 views
1

私はこれを間違った方法で行うことができますが、わかりません。私はユーザーがアドレスを入力できる検索バーを持っています。リクエストがGoogleのAPIに送信され、入力したアドレスに対応するアドレスのセットがRadGridViewに表示されます。私はアドレスが罰金を示している。C#でのRadGridViewの行値へのアクセス

ここで、アドレスのlat値とlng値を取得し、それらの値をマップ上で探したいとします。私が抱えている問題は、RadGridViewのアドレスを選択する際に行の値にアクセスできないことです。ユーザーが住所を選択したときにヒットするメソッドを作成しましたが、grid.SelectedItemはnullを返しています。

私はこれを間違った方法で行うことができます。何か案は?あなたはボーダーにイベントハンドラの送信者の引数をキャストして、そのDataContextのプロパティを使用して、現在のデータオブジェクトにアクセスすることができ

xaml.cs

private void SearchTB_KeyDown(object sender, KeyEventArgs e) 
{ 
searchclose.Opacity = 1; 
    if (e.Key == Key.Enter) 
    { 
     var address = SearchTB.Text; 

    var requestUri = string.Format("http://localhost/media/TextToSpeech/TextToSpeechService.svc/getDataProxy?url=https://maps.googleapis.com/maps/api/geocode/json?address={0}&key=AIzaSyCgsNpuUoH7m6U7lqeZjlLZ3MgM15PW15o", Uri.EscapeDataString(address)); 

     HttpWebRequest request = WebRequest.Create(requestUri) as HttpWebRequest; 
     request.Method = "GET"; 
     IAsyncResult result = request.BeginGetResponse(new AsyncCallback(RequestCompleted), request); 
    } 
} 

private void RequestCompleted(IAsyncResult result) 
{ 
    var request = (HttpWebRequest)result.AsyncState; 
    var response = (HttpWebResponse)request.EndGetResponse(result); 
    Stream stream = response.GetResponseStream(); 

    try 
    { 
     StreamReader reader = new StreamReader(stream); 
     string text = reader.ReadToEnd(); 

     Regex rgx = new Regex("<.*\\>"); 
     string newResult = rgx.Replace(text, ""); 

     JObject json = JObject.Parse(newResult); 
     JArray results = (JArray)json["results"]; 

     List<object> locationList = new List<object>(); 
     ObservableCollection<object> AddressList = new ObservableCollection<object>(); 

     if (results.Count == 0) 
     { 
      Dispatcher.BeginInvoke(new Action(() => MessageBox.Show("No results found"))); 
     } 
     else 
     { 
      foreach (JObject obj in results) 
      { 
       if (obj == null) 
       { 
        Dispatcher.BeginInvoke(new Action(() => MessageBox.Show("Address returned no results"))); 
       } 
       string formattedAddress = (string)obj["formatted_address"]; 
       AddressList.Add(formattedAddress); 

       object loc = (object)obj["geometry"]["location"]; 
       locationList.Add(loc); 
       //TODO Add exception handling 
      } 
      Dispatcher.BeginInvoke(new Action(() => addressGrid.ItemsSource = AddressList)); 
     } 

    } 
    catch (Exception ex) 
    { 
     Dispatcher.BeginInvoke(new Action(() => MessageBox.Show("Error" + ex.Message))); 
    } 

} 

    private void SelectedAddress_Click(object sender, RoutedEventArgs e) 
    { 
     object dodo = ""; 
     dodo = addressGrid.SelectedItem; 
    } 

XAML

<!--Address Results--> 
<telerik:RadGridView Grid.Row="2" AutoGenerateColumns="False" x:Name="addressGrid" Margin="18 0 0 18" CanUserFreezeColumns="False" CanUserSelect="True" 
     EnableColumnVirtualization="True" EnableRowVirtualization="True" ShowGroupPanel="False" ScrollViewer.VerticalScrollBarVisibility="Visible" 
     CanUserDeleteRows="False" RowIndicatorVisibility="Collapsed" DataLoadMode="Asynchronous" HeaderRowStyle="{StaticResource ZoneActivityHeaderRowStyle}" 
     GroupPanelStyle="{StaticResource GroupPanelStyle}" Background="#00000000" VerticalGridLinesBrush="#00000000" HorizontalGridLinesBrush="#00000000" AlternationCount="2" 
     RowHeight="32" ShowColumnHeaders="False" RowStyle="{StaticResource ActivityRowStyle}" AlternateRowStyle="{StaticResource ActivityAlternateRowStyle}"> 

    <telerik:RadGridView.Columns> 

     <telerik:GridViewDataColumn Header="Targetting" Width="35" IsReadOnly="True" IsFilterable="False" ShowDistinctFilters="True" IsGroupable="False" IsVisible="True"> 
      <telerik:GridViewDataColumn.CellTemplate> 
       <DataTemplate> 
        <ctrl:TargetButton x:Name="targetButton" VerticalAlignment="Center" HorizontalAlignment="Center" Visibility="Visible" /> 
       </DataTemplate> 
      </telerik:GridViewDataColumn.CellTemplate> 
     </telerik:GridViewDataColumn> 

     <telerik:GridViewDataColumn Header="Address" Width="*" IsReadOnly="True" 
       IsFilterable="False" ShowDistinctFilters="True" IsGroupable="False"> 
      <telerik:GridViewDataColumn.CellTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBlock Text="{Binding}" Foreground="White" FontFamily="Segoe UI" 
            FontSize="12" VerticalAlignment="Center" Margin="5" TextWrapping="Wrap" /> 
         <Border Background="#00000000" Height="40" Margin="-5 0" Cursor="Hand" MouseLeftButtonDown="SelectedAddress_Click" /> 
        </Grid> 
       </DataTemplate> 
      </telerik:GridViewDataColumn.CellTemplate> 
     </telerik:GridViewDataColumn> 

    </telerik:RadGridView.Columns> 
</telerik:RadGridView> 

答えて

0

private void SelectedAddress_Click(object sender, RoutedEventArgs e) 
{ 
    Border border = sender as Border; 
    object dodo = border.DataContext; 
    string address = dodo as string; 
    if (!string.IsNullOrEmpty(address)) 
    { 
     //... 
    } 
}