Как читать конкретные столбцы из Gridview.Items в WPF? - PullRequest
0 голосов
/ 30 августа 2018

Я вставил несколько URL-адресов в URL-адрес столбца GridView. Теперь я хочу прочитать все URL из столбца URL . Я не уверен, как открыть URL по одному из URL-адреса столбца. Я попытался загрузить {Binding URL} , но это было невозможно.

Есть ли способ прочитать текст из URL-адреса столбца GridView? или я должен попробовать другой подход?

Ниже XAML:

<Grid RenderTransformOrigin="0.5,0.5">

    <Grid.RenderTransform>
        <TransformGroup>
            <ScaleTransform/>
            <SkewTransform/>
            <RotateTransform/>
            <TranslateTransform/>
        </TransformGroup>

    </Grid.RenderTransform>

    <Label x:Name="label1" Content="URL :" HorizontalAlignment="Left" Margin="22,27,0,0" VerticalAlignment="Top"/>
    <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="146" Margin="64,30,0,0" TextWrapping="Wrap" Text="Enter URLs Here" VerticalAlignment="Top" Width="555" AcceptsReturn="True"/>
    <Button x:Name="button1" Content="Load" HorizontalAlignment="Left" Margin="652,19,0,0" VerticalAlignment="Top" Width="134" Height="40" Click="Button1_Click"/>
    <Grid Margin="0,0,0,0.333">

        <DataGrid x:Name="dataGrid1" HorizontalAlignment="Left" Height="225" VerticalAlignment="Top" Width="761" Margin="22,185,0,0" AutoGenerateColumns="True">
            <DataGrid.Columns>

                <DataGridHyperlinkColumn Header="URL" Width="150" Binding="{Binding URL}"/>
                <DataGridHyperlinkColumn Header="Source" Width="150" Binding="{Binding Source}"/>

            </DataGrid.Columns>

        </DataGrid>

    </Grid>      

</Grid>

Код позади:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;


namespace AIT
{
    /// <summary>
    /// Interaction logic for Window2.xaml
    /// </summary>
    public partial class Window2 : Window
    {
        public Window2()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, RoutedEventArgs e)
        {
            List<string> Urllines = textBox1.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
            foreach (string strUrl in Urllines)
                dataGrid1.Items.Add(new { URL = strUrl});
        }

        private void ReadUrls()
        {
            foreach (string item in dataGrid1.Items)
                //item.URL???
        }
    }
}

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете читать элементы из DataGrid.Items, например:

foreach (var item in dataGrid1.Items)
{
    string url = (string)((dynamic)item).URL;
    //...
}

Однако лучше иметь строго типизированный подход. В этом случае вам нужно связать ItemsSource из DataGrid с ObservableCollection<DataType>, где DataType представляет структуру данных каждой строки. (например, у него есть привязываемое свойство URL и т. д.)

Вот пример:

<DataGrid ItemsSource="{Binding ElementName=root, Path=Items}" ...>

где root - это x: имя окна. и следующий код добавляется к коду Windows:

    private ObservableCollection<RowVm> _items = new ObservableCollection<RowVm>();
    public ObservableCollection<RowVm> Items { get { return _items; } }

где RowVm:

public class RowVm : DependencyObject
{
    public string URL
    {
        get { return (string)GetValue(URLProperty); }
        set { SetValue(URLProperty, value); }
    }
    public static readonly DependencyProperty URLProperty =
        DependencyProperty.Register("URL", typeof(string), typeof(RowVm), new PropertyMetadata(""));
    public string Source
    {
        get { return (string)GetValue(SourceProperty); }
        set { SetValue(SourceProperty, value); }
    }
    public static readonly DependencyProperty SourceProperty =
        DependencyProperty.Register("Source", typeof(string), typeof(RowVm), new PropertyMetadata(""));

}

Таким образом, вместо добавления к dataGrid1.Items вы добавите к Items и прочитаете из Items

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...