powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Интерфейс не виден из шаблона
9 сообщений из 9, страница 1 из 1
Интерфейс не виден из шаблона
    #38870860
Rivmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, в чем может быть косяк - объявленный интерфейс не виден из шаблона. С С# столкнулся впервые. Исходников не было, пришлось пользоваться ILSpy и JustDecompile. Само приложение компилится и запускается, но падает с ошибкой "Не удалось создать "Type" на основе текста "Data:IRobotVideo".

Интерфейс
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
using System;

namespace RobotViewer.Data
{
	public interface IRobotVideo : IVersioned, IIdentifiable
	{
		string FileName { get; }

		string Preview100 { get; }

		string Preview200 { get; }

		string RobotID { get; }

		string RobotName { get; }
	}
}



Шаблон
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<?xml version="1.0" encoding="utf-8"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                            xmlns:Data="clr-namespace:RobotViewer.Data">

....

  <DataTemplate x:Key="RobotVideoTemplate" DataType="{x:Type Data:IRobotVideo}">
    <Border>
      <Grid>
        <Grid.RowDefinitions>
          <RowDefinition Height="90" />
          <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="120" />
        </Grid.ColumnDefinitions>
        <Border Name="thumbnailBorder" Padding="2">
          <Border.Background>
            <SolidColorBrush x:Name="backgroundBrush" Color="Black" />
          </Border.Background>
          <Image Name="thumbnail" Height="75" Width="100" Stretch="Uniform" VerticalAlignment="Center" 
                     HorizontalAlignment="Center" RenderOptions.BitmapScalingMode="HighQuality" 
                     Source="{Binding Path=(Data:IRobotVideo.Preview100)}" />
        </Border>
      </Grid>
    </Border>

......
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38870954
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivmer,

Вы с свойство Source объекта Image привязывайте поле типа String, а нужен тип ImageSource.
Нужно использовать либо конвертер, либо поле делать соответствующего типа
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38871023
Rivmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, что там тоже ошибка, но у меня пока ругается на само объявление шаблона.
Код: c#
1.
<DataTemplate x:Key="RobotVideoTemplate" DataType="{x:Type Data:IRobotVideo}">



В VS2013 при автоподстановке показываются только классы неймспейса Data, а интерфейсы нет. Сейчас я воюю именно с этим.
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38871031
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesRivmer,
Вы с свойство Source объекта Image привязывайте поле типа String, а нужен тип ImageSource.
Нужно использовать либо конвертер, либо поле делать соответствующего типа
Нет, это вовсе необязательно - из модели вполне можно передать стринг.

Rivmer, судя по
Код: xml
1.
Source="{Binding Path=(Data:IRobotVideo.Preview100)}"


у вас для класса имеет место быть explicit interface method implementation. Как реализована вьюмодель? Реализуемые интерфейсы находятся в той же сборке? У меня вот такое работает вполне нормально:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public partial class MainWindow
{

  public MainWindow()
  {
    InitializeComponent();
    Data = new List<ISomeData> {new SomeData()};
    DataContext = this;
  }

  public List<ISomeData> Data { get; private set; }
  private class SomeData : ISomeData, ISomeOtherData
  {
    string ISomeData.Image
    {
      get { return "/wpftest2;component/jr.png"; }
    }

    string ISomeOtherData.Image
    {
      get
      {
        throw new NotImplementedException();
      }
    }
  }
}

public interface ISomeData
{
  string Image { get; }
}
public interface ISomeOtherData
{
  string Image { get; }
}


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:l="clr-namespace:wpftest2">

  <DataTemplate x:Key="EIMIKey" DataType="{x:Type l:ISomeData}">
    <Grid>
      <Image
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        Stretch="None"
        Source="{Binding Path=(l:ISomeData.Image)}" />
    </Grid>
  </DataTemplate>
</ResourceDictionary>


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<Window
  x:Class="wpftest2.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Width="600"
  Height="400"
  WindowStartupLocation="CenterScreen"
  ResizeMode="CanResize">

  <Window.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/wpftest2;component/Dictionary1.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Window.Resources>
  <Grid Margin="10">
    <ListView
      ItemsSource="{Binding Data}"
      ItemTemplate="{StaticResource EIMIKey}"/>
  </Grid>
</Window>
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38871032
Rivmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно внутрь полез из-за необходимости обновить проприетарные библиотеки, для которых изменившийся ключ был зашит в коде. Так что, все что нагенерено декомпиляторами, по идее должно работать после обработки напильником.
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38871050
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

и что вы туда передает строкой? адрес для Uri?
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38871052
Rivmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныу вас для класса имеет место быть explicit interface method implementation. Как реализована вьюмодель? Реализуемые интерфейсы находятся в той же сборке? У меня вот такое работает вполне нормально:


Судя по всему этот интерфейс как раз реализован, для содержимого подключаемой библиотеки.
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38871098
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesСон Веры Павловны,
и что вы туда передает строкой? адрес для Uri?
а как вы думаете, что это?
Код: c#
1.
2.
3.
4.
    string ISomeData.Image
    {
      get { return "/wpftest2;component/jr.png"; }
    }


RivmerСудя по всему этот интерфейс как раз реализован, для содержимого подключаемой библиотеки.
Ну, если бы он не был реализован, то у вас бы проект просто не собрался. А здесь он реализован эксплицитно, когда для вызова метода нужен обязательный тайпкаст к интерфейсу, объявившему метод - напрямую на экземпляре реализующего типа этот метод вызвать нелья. Отсюда необходимость указания типа интерфейса в пути биндинга.
...
Рейтинг: 0 / 0
Интерфейс не виден из шаблона
    #38871807
Rivmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализация данного интерфейса находится в соседнем неймспейсе, но в данном шаблоне не используется.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Интерфейс не виден из шаблона
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]