Проблема в привязке данных к источнику изображения WPF - PullRequest
0 голосов
/ 18 ноября 2009

У меня возникла проблема с привязкой данных к исходному свойству Image.

У меня есть ListView Шаблон

<Style x:Key="ListViewStyle" TargetType="{x:Type ListView}">
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate x:Key="ListViewItemTemplate">
                <StackPanel Width="60"  Margin="5,5,10,5">
                    <Image Height="40" Width="40" Source="{Binding XPath=@Image}"
                           HorizontalAlignment="Center"/>
                    <TextBlock Text="{Binding XPath=@Name}" TextAlignment="Center"
                               TextWrapping="Wrap" FontWeight="bold"
                               HorizontalAlignment="Center" Margin="0,0,0,1" />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

Это Style определено в файле словаря ресурсов, который добавлен в app.xaml. (Так доступно везде).

Теперь у меня есть окно, в котором я использовал этот стиль для ListVew. В WindowResources я создал провайдера xmldatasource:

<XmlDataProvider x:Key="MyData" XPath="/Reports">
    <x:XData>
        <Reports xmlns="">
            <Item Name = "Item1" Image="Resources\MenuIcons\Pic1.png"/>
            <Item Name = "Item2" Image="Resources\MenuIcons\Pic2.png"/>
            <Item Name = "Item3"  Image="Resources\MenuIcons\Pic3.png"/>
        </Reports>
    </x:XData>
</XmlDataProvider>

и я назначил этот источник данных как ItemsSource для Listview:

<ListView Name="MyListView" Style="{DynamicResource ListViewStyle}"
          ItemTemplate="{StaticResource ListViewItemTemplate}"
          ItemsSource="{Binding Source={StaticResource MyData},XPath=Item}"/>

Моя проблема заключается в том, что при запуске приложения отображается текст ListViewItem, но отсутствует Image ..

Но когда я определил это Style внутри Window.Resource и использовал Style в качестве StaticResource вместо Dynamic Resource, все отлично работает.

Может кто-нибудь сказать мне причину неиспользования Image? Я хочу использовать этот стиль глобально (поэтому мне нужно определить его в ResourceDictionary). Кто-нибудь может мне помочь?

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Я думаю, что никто еще не ответил на ваш вопрос, потому что мы не увидели ничего плохого.

Я решил попытаться воспроизвести вашу проблему, но ваш код работал отлично, хотя я пытался выполнить ваши шаги по воспроизведению.

Вот мои шаги:

  1. Создано пустое приложение WPF
  2. Добавлен файл ResouceDictionary Dictionary1.xaml
  3. Вставил код <Style> в Dictionary1.xaml внутри тега <ResourceDictionary>
  4. Отредактировал опечатку, в которой вы задали ключ x: на шаблоне данных
  5. Добавлен <Window.Resources> элемент в начало Window1.xaml
  6. Вставил ваш <XmlDataProvider> код в тег <Window.Resources>
  7. Замененные пути к изображениям, например, Image="Resources\MenuIcons\Pic1.jpg" стал Image="TestImage.jpg"
  8. Вставил ваш <ListView> код в тег <Grid>
  9. Удалил ваше фиктивное ItemTemplate значение, предполагая, что оно осталось от старого кода
  10. Слил словарь "Dictionary1.xaml" в словарь приложения в App.xaml

Вот соответствующая разметка из App.xaml:

<Application
   ...>

  <Application.Resources>
    <ResourceDictionary>

      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Dictionary1.xaml" />
      </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>
  </Application.Resources>

</Application>

Когда я запустил приложение, я увидел ListBox, содержащий изображения с текстом внизу.

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

0 голосов
/ 20 ноября 2009

Хм .. Я обнаружил проблему ... Проблема была в том, что файл словаря стиля и изображения были в 2 отдельных каталогах в каталоге проектов. Я сохранил все файлы словарей в каталоге стилей и все изображения в каталоге ресурсов, который находится за пределами каталога стилей. Поэтому мне нужно изменить путь к изображению в XML как

<XmlDataProvider x:Key="MyData" XPath="/Reports">
            <x:XData>
                <Reports xmlns="">
                    <Item Name = "Item1" Image="..\Resources\MenuIcons\Pic1.png"/>
                    <Item Name = "Item2" Image="..\Resources\MenuIcons\Pic2.png"/>
                    <Item Name = "Item3"  Image="..\Resources\MenuIcons\Pic3.png"/>
                </Reports>
            </x:XData>
        </XmlDataProvider>

(Я должен добавить .. \ before path) Это решило мою проблему .. Спасибо Рэй Бернс за ваш ответ .. - Сасикумар Д.Р. 0

...