Связывание с конвертером - PullRequest
0 голосов
/ 09 февраля 2012

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

<TextBlock  DataContext="{Binding Path=SiteId, Converter={StaticResource siteConverter},ConverterParameter=SiteId}" Text="{Binding Path=SiteName}" ></TextBlock>

Есть ли сделать привязку непосредственно в текстовом свойстве

ПРАВКА.*

   <ListView  SelectedItem="{Binding SelectedReport}"  AlternationCount="2" Grid.Row="2" Name="reportList" ItemsSource="{Binding ReportsView}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch">
            <ListView.View>
                <GridView>
                    <GridView.ColumnHeaderContextMenu>
                        <ContextMenu >
                            <MenuItem Header="Ascending"  />  
                            <MenuItem Header="Descending" />    
                        </ContextMenu>   
                    </GridView.ColumnHeaderContextMenu>   
                    <GridViewColumn Header="Action" CellTemplate="{StaticResource imageCell}" Width="Auto"/>
                    <GridViewColumn Header="Reportname" Width="Auto" CellTemplate="{StaticResource reportNameCell}"/>
                    <GridViewColumn Header="Site" Width="Auto" CellTemplate="{StaticResource reportSiteNameCell}"/>
                    <GridViewColumn Header="Company" Width="Auto" CellTemplate="{StaticResource reportCompanyNameCell}"/>
                    <GridViewColumn Header="Type" Width="Auto" DisplayMemberBinding="{Binding DocType}"/>
                    <GridViewColumn Header="Status" Width="Auto" DisplayMemberBinding="{Binding Status}"/>
                    <GridViewColumn Header="Created by" Width="Auto" DisplayMemberBinding="{Binding CreatedBy}"/>
                    <GridViewColumn Header="Language" Width="Auto" DisplayMemberBinding="{Binding CreatedBy}"/>
                    <GridViewColumn Header="Updated" Width="Auto" DisplayMemberBinding="{Binding Updated}"/>
                </GridView>
            </ListView.View>
        </ListView>

РЕДАКТИРОВАТЬ Вот как я загружаю свою модель просмотра

ReportList = reportListService.Open(filePath);
this.reportsView = CollectionViewSource.GetDefaultView(this.ReportList.Reports);
this.reportsView.SortDescriptions.Add(
new SortDescription("ReportName", ListSortDirection.Ascending));

В ReportList содержится только siteid

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Хорошо, хорошо ... сначала пара вещей:

1) Почему вы передаете SiteId в качестве параметра ConverterParameter, а также как объект привязки. Это избыточно ... вы передаете тот же параметр, что и значение и параметр метода Convert?

2) Если вы используете ListView, свяжите ItemsSource с коллекцией (желательно наблюдаемой), затем используйте DataTemplate в качестве ListView.ItemTemplate. Если DataTemplate можно повторно использовать для нескольких ListView s, создайте его как ресурс и установите для ItemTemplate привязку к ресурсу.

Или ... лучшее решение: показать вещи из модели представления, которая должна быть. Это не звучит так, как будто «SiteName» имеет отношение к представлению, так же как и к бизнесу. Поэтому вместо этого разместите логику преобразователя на уровне модели представления и предоставьте это дополнительное свойство.

0 голосов
/ 09 февраля 2012

Самым простым способом было бы реализовать свойство Site в контексте данных, которое содержит функциональные возможности, которые конвертер реализует в настоящее время. Тогда вы можете легко связать с Site.SiteName. Просто убедитесь, что контекст данных запускает событие PropertyChanged для Site, когда установлено SiteId, чтобы избежать неприятных сюрпризов.

Однако вышеприведенный подход нецелесообразен, если конвертер используется повсеместно с одинаковым параметром для разных контекстов данных без общего интерфейса или с разными базовыми классами.

0 голосов
/ 09 февраля 2012

Да, вы установили текст данных самого представления в класс ViewModel.Тогда все, что вам нужно сделать для элементов управления:

Text="{Binding StringPropertyToBindTo}"
...