URL извлечения из текста в PHP

clr-namespace: MyProject.ViewModels

Должно быть пространство имен с именем MyProject.ViewModels, которое имеет класс Called MainPageViewModel, который является открытым и имеет открытый конструктор без параметров внутри та же сборка, что и ProjectDatabaseRebuilder.MainWindow.

Нет.

Если MyProject.ViewModels существует в ссылочной сборке, вы должны указать это в xmlns.

xmlns:vm="clr-namespace:MyProject.ViewModels;assembly=MyProject"

или что-то подобное. Честно говоря, похоже, что вы скопировали чей-то пример, не понимая, как эти специализированные пространства имен xml работают в WPF.

Что-то подсказывает мне, что окончательный ответ будет следующим: xmlns:vm="clr-namespace:ProjectDatabaseRebuilder.ViewModels".

Обратите внимание, что «пространство имен» и (как указано выше) «сборка» означают пространства имен и сборки, и десериализатор xaml использует эту информацию для поиска типов во время выполнения. Если они неверны, вещи не будут работать.


Это тривиально. Вы, должно быть, сделали что-то странное с вашим проектом, что может потребовать, чтобы вы начали с нуля. Или вы можете создать новый проект, следуя моему руководству ниже, а затем сравнить его по частям с вашим, чтобы увидеть, где вы ошиблись.

Сначала создайте новое приложение WPF под названием MyWpfApplication.

Добавить папку для Views и одну для ViewModels. Добавьте показанный класс кода VM и просмотрите UserControl:

enter image description here

В своем классе кода добавьте следующее:

namespace MyWpfApplication.ViewModels
{
    class MainWindowViewModel
    {
        public string Text { get; set; }

        public MainWindowViewModel()
        {
            Text = "It works.";
        }
    }
}

Ваше представление также просто:

<UserControl
    x:Class="MyWpfApplication.Views.MainWindowView"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Grid>
        <TextBlock
            Text="{Binding Text}"
            HorizontalAlignment="Center"
            VerticalAlignment="Center" />
    </Grid>
</UserControl>

И, в своем Окне, делайте, по сути, то, что вы пытаетесь сделать:

<Window
    x:Class="MyWpfApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:v="clr-namespace:MyWpfApplication.Views"
    xmlns:vm="clr-namespace:MyWpfApplication.ViewModels"
    Title="DERP"
    Content="{Binding DataContext, RelativeSource={RelativeSource Self}}">
    <Window.Resources>
        <DataTemplate
            DataType="{x:Type vm:MainWindowViewModel}">
            <v:MainWindowView />
        </DataTemplate>
    </Window.Resources>
    <Window.DataContext>
        <vm:MainWindowViewModel />
    </Window.DataContext>
</Window>

И, когда вы запускаете, вы должны видеть все как положено:

enter image description here

Сделайте это, затем сравните рабочее решение с вашим проектом. Если вы не можете найти каких-либо различий, вам, вероятно, нужно просто отказаться от своего решения и начать все сначала. Скопируйте код, а не файлы, в новое решение.

40
задан Amal Murali 16 June 2014 в 20:10
поделиться

3 ответа

URL-адреса имеют довольно сложное определение - сначала вы должны решить, что вы хотите захватить. Простым примером захвата всего, что начинается с http: // и https: // , может быть:

preg_match_all('!https?://\S+!', $string, $matches);
$all_urls = $matches[0];

Обратите внимание, что это очень простой способ захвата недействительных URL-адресов. Я бы порекомендовал изучить POSIX и регулярные выражения PHP для более сложных задач.

12
ответ дан 27 November 2019 в 01:20
поделиться

Если текст, из которого вы извлекаете URL-адреса, был отправлен пользователем, и вы собираетесь отображать результат в виде ссылок где угодно, вы должны быть очень, ОЧЕНЬ осторожны, чтобы избежать уязвимостей XSS , наиболее заметных URL-адресов протокола «javascript:», но также искаженных URL-адресов , которые могут обмануть ваше регулярное выражение и / или отображающий браузер для выполнения их как URL-адресов Javascript. По крайней мере, вы должны принимать только те URL, которые начинаются с «http», «https» или «ftp».

Там '

8
ответ дан 27 November 2019 в 01:20
поделиться
preg_match_all('/[a-z]+:\/\/\S+/', $string, $matches);

Это простой способ, который работает не во всех, а во многих случаях. Все совпадения помещаются в $ match. Обратите внимание, что это не распространяется на ссылки в элементах привязки (

4
ответ дан 27 November 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: