Я пытаюсь добавить поле со списком в свою таблицу данных WPF с параметрами в списке со списком SharePoint.Мне удалось получить параметры в поле со списком ОК, но он не прослушивает параметр SelectedItemBinding, и значения отображаются пустыми для каждого элемента.Данные для DataGrid также поступают из списка SharePoint, но они были преобразованы в коллекцию ObservableCollection.Вот XAML:
<DataGrid Name="dgVendorSchedule" Grid.Column="1" Grid.Row="2" Grid.ColumnSpan="3"
AutoGenerateColumns="False"
SelectionChanged="dgVendorSchedule_SelectionChanged"
EnableRowVirtualization="True"
IsReadOnly="False"
>
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding title, Mode=TwoWay}" />
<!-- <DataGridTextColumn Header="Vendor" Binding="{Binding vendorName, Mode=TwoWay}" />-->
<DataGridComboBoxColumn x:Name="cmbVendor"
Header="Vendor"
SelectedValueBinding="{Binding vendorName}"
DisplayMemberPath="Title">
</DataGridComboBoxColumn>
<DataGridTextColumn Header="Billing Date" Binding="{Binding billingDate, Mode=TwoWay}" />
<DataGridTextColumn Header="Payment" Binding="{Binding paymentTitle, Mode=TwoWay}"/>
<DataGridTextColumn Header="Invoice" Binding="{Binding invoiceTitle, Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
и вот код:
var lstVendors = (from i in colVendorSched.AsEnumerable<SP.ListItem>()
select new vendor
{
vendorName = ((SP.FieldLookupValue)i["Vendor"]).LookupValue,
billingDate = ((DateTime)i["Billing_x0020_Date_x0020__x0028_"]).ToLocalTime(),
itemID = (int)i["ID"],
title = (string)i["Title"],
//using the ? operator to trap null values on the lookup field before retrieving the lookupvalue property
invoiceTitle = i["Invoice"] == null ? "" : ((SP.FieldLookupValue)i["Invoice"]).LookupValue,
paymentTitle = i["Payment"] == null ? "" : ((SP.FieldLookupValue)i["Payment"]).LookupValue
});
var lstVendorList = (from i in colVendorList.AsEnumerable<SP.ListItem>()
select new
{
Title = i["Title"],
ID = i["ID"]
});
cmbVendor.ItemsSource = lstVendorList;
ObservableCollection<vendor> obsVendors = new ObservableCollection<vendor>(lstVendors);
dgVendorSchedule.ItemsSource = obsVendors;
Я довольно новичок в работе с WPF, и, честно говоря, этот связующий материал заставляет мою голову болеть.Буду признателен за любые указатели.
РЕДАКТИРОВАТЬ: для потомков ... Оказалось, что решением было создать класс для vendorItem и сделать его членом класса вендора, например:
public class vendor
{
public VendorItem vendorName {get; set;}
public DateTime billingDate {get; set;}
public int itemID {get; set;}
public string title {get; set;}
public string invoiceTitle {get; set;}
public string paymentTitle { get; set; }
}
public class VendorItem
{
public string Title { get; set; }
public int ID { get; set; }
}
Это сделало егоможно установить selectedValuePath и правильно настроить привязку.Вот рабочий XAML для столбца:
<DataGridComboBoxColumn x:Name="cmbVendor"
Header="Vendor"
SelectedValueBinding="{Binding vendorName.ID}"
SelectedValuePath="ID"
DisplayMemberPath="Title" >
</DataGridComboBoxColumn>