Проблема привязки WPT DataTemplate ComboBox - PullRequest
1 голос
/ 28 февраля 2011

Редактировать: переписать вопрос

Я использую библиотеку управления проектами из http://dlhsoft.com/Home.aspx в моем пользовательском контроле WPF.

Я показываю их элемент управления LoadChartResourceListView на своей странице и использую табличку с данными для отображения пользовательских столбцов в виде списка:

<my:LoadChartResourceListView TaskManagerSource="{Binding ElementName=ganttChartTaskListView,Path=TaskManager}" 
                                TimelinePageStart="{Binding TimelinePageStart, ElementName=ganttChartTaskListView, Mode=TwoWay}"
                                TimelinePageFinish="{Binding TimelinePageFinish, ElementName=ganttChartTaskListView, Mode=TwoWay}" 
                                DisplayedTime="{Binding DisplayedTime, ElementName=ganttChartTaskListView, Mode=TwoWay}"
                                Margin="6" Name="loadChartResourceListView">
        <my:LoadChartResourceListView.View>
            <GridView ColumnHeaderContainerStyle="{StaticResource ListViewColumnHeaderContainerStyle}">
                <!-- Set CellTemplate (or CellTemplateSelector) to specify column templates. -->
                <GridViewColumn Header="Group" Width="100">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox Width="85" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, 
                                AncestorType={x:Type inf:MEFUserControl}}, Path=DataContext.ResourceGroups}" 
                                DisplayMemberPath="GroupName"
                                SelectedValuePath="GroupID" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>  
                <GridViewColumn Header="Resource">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="myTB" Text="{Binding Content}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

Весь пользовательский элемент управления (inf: MEFUserControl), который содержит этот LoadChartResourceListView, имеет datacontext, установленный для экземпляра моего класса viewmodel (TaskData). Внутри класса TaskData находится ObservableCollection<ResourceGroup> ResourceGroups {get;set;}. Каждая группа ресурсов имеет int GroupID {get;set;} и string GroupName{get;set;}.

Кроме того, в классе TaskData есть ObservableCollection<Resource> Resources {get;set;} ... каждый Ресурс имеет int GroupID{get;set;}, строку Content {get;set;} и ResourceGroup ResGroup{get;set;}

Приведенный выше код прекрасно работает с отображением выпадающего списка и текстового поля ... Я не могу понять, почему у меня возникают проблемы с привязкой к свойству SelectedValue этого выпадающего списка. У меня много вещей, включая SelectedValue="{Binding GroupID}"

Каждый раз, когда я пытаюсь установить SelectedValue, я получаю всплывающее сообщение об ошибке в VS: «Произошло первое исключение типа« System.Reflection.AmbiguousMatchException »в mscorlib.dll» Это ошибка из окна вывода (его объем) http://pastebin.com/AGJwn00C

Из прочитанного я прочитал, что это связано с тем, что родительский объект имеет свойство с тем же именем «GroupID». Я переименовал GroupID в ResGroupID в классе Resource, думая, что он конфликтует с классом ResourceGroup, но я получаю ту же ошибку.

Когда я устанавливаю этот ItemsSource, для DataContext для комбинированного списка задается экземпляр UserControl или TaskData?

Обновление:

Я получаю сообщение об ошибке также при использовании TextBox вместо комбинированного списка:

<TextBox Text="{Binding GroupID}"/>

Ответы [ 2 ]

0 голосов
/ 28 февраля 2011

Решил это.Прочитав это: http://dlhsoft.com/KnowledgeBase/Task-Appearance-Bar-Templating-Custom-Data-Binding.htm

Я должен был сделать Item.PropertyName для пользовательских свойств.

0 голосов
/ 28 февраля 2011

Просто напишите

SelectedValue = "{Binding Path = GroupID}"

...