Silverlight DataGrid. Celltemplate, связывающий с ViewModel

Я использовал 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()

5
задан Rob 6 July 2009 в 23:20
поделиться

2 ответа

Я не знаю, применимо ли это к SL, но вы можете проверить это:

«Коллекция Columns - это просто свойство в Datagrid; эта коллекция не входит в логическую (или визуальное) дерево, поэтому DataContext не наследуется, что приводит к тому, что не к чему привязываться. "

http://blogs.msdn.com/jaimer/archive/2008/11/22/forwarding- the-datagrid-s-datacontext-to-its-columns.aspx

2
ответ дан 15 December 2019 в 06:32
поделиться

Вы все еще можете связывать данные со статическими ресурсами внутри ваших 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>
1
ответ дан 15 December 2019 в 06:32
поделиться
Другие вопросы по тегам:

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