Я использовал eyeD3 на днях с большим успехом. Я нашел, что это могло добавить иллюстрации к тегу ID3, который не могли другие модули, на которые я смотрел. Необходимо будет загрузить tar и выполниться python setup.py install
от исходной папки.
Соответствующие примеры от веб-сайта ниже.
Чтение содержания mp3 файла, содержащего или v1 или v2, отмечают информацию:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
print tag.getAlbum()
print tag.getTitle()
Read mp3 файл (отслеживают длину, скорость передачи, и т.д.) и доступ это - тег:
if eyeD3.isMp3File(f):
audioFile = eyeD3.Mp3AudioFile(f)
tag = audioFile.getTag()
Определенные версии тега могут быть выбраны:
tag.link("/some/file.mp3", eyeD3.ID3_V2)
tag.link("/some/file.mp3", eyeD3.ID3_V1)
tag.link("/some/file.mp3", eyeD3.ID3_ANY_VERSION) # The default.
Или можно выполнить итерации по необработанным кадрам:
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
for frame in tag.frames:
print frame
, Как только тег связан с файлом, он может быть изменен и сохранен:
tag.setArtist(u"Cro-Mags")
tag.setAlbum(u"Age of Quarrel")
tag.update()
, Если бы тег, связанный в, был v2 и требуется сохранить его как v1:
tag.update(eyeD3.ID3_V1_1)
Read в теге и удаляют его из файла:
tag.link("/some/file.mp3")
tag.remove()
tag.update()
Добавляют новый тег:
tag = eyeD3.Tag()
tag.link('/some/file.mp3') # no tag in this file, link returned False
tag.header.setVersion(eyeD3.ID3_V2_3)
tag.setArtist('Fugazi')
tag.update()
Я не знаю, применимо ли это к SL, но вы можете проверить это:
«Коллекция Columns - это просто свойство в Datagrid; эта коллекция не входит в логическую (или визуальное) дерево, поэтому DataContext не наследуется, что приводит к тому, что не к чему привязываться. "
Вы все еще можете связывать данные со статическими ресурсами внутри ваших DataTemplates, даже когда привязка данных к элементам не работает. Одним из методов ссылки представлений на модель представления в шаблоне MVVM является хранение модели представления в статическом ресурсе, таком как ViewModelLocator, используемый MVVM Light Toolkit.
Предполагая, что ваша модель представления имеет имя TestViewModel, я могу изменить ваш пример XAML, чтобы использовать ViewModelLocator и в итоге получить следующее.
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class="Timesheet.Silverlight.Modules.Views.HistoryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:Commands="clr-namespace:Microsoft.Practices.Composite.Presentation.Commands;assembly=Microsoft.Practices.Composite.Presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModels="clr-namespace:Timesheet.Silverlight.Modules.ViewModels"
x:Name="View"
DataContext="{Binding TestViewModel, Source={StaticResource Locator}}"
>
<StackPanel>
<TextBlock Text="{Binding Path=DataContext.testText, ElementName=View}" />
<data:DataGrid Height="280" Width="500" ItemsSource="{Binding TimeSlots}" AutoGenerateColumns="False" >
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Allocation Area" Binding="{Binding TimeAllocationArea.TimeAllocationName}" Width="200" />
<data:DataGridTextColumn Header="Start" Binding="{Binding StartTime}" Width="80" />
<data:DataGridTextColumn Header="End" Binding="{Binding Path=DataContext.testText, ElementName=View}" Width="80" />
<data:DataGridTemplateColumn Header="Modify" Width="200" >
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!--<TextBlock Text="{Binding Path=DataContext.testText, ElementName=View}" />-->
<TextBlock Text="{Binding Source={StaticResource Locator}, Path=TestViewModel.testText}" />
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
</StackPanel>
</UserControl>