У меня есть столбец DataGrid, подобный этому
<dxg:GridControl DockPanel.Dock = "Right" Name = "gridControl" ItemsSource = "{Binding FilterWiseListOfWorkOrder,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" >
<dxg:GridColumn Header = "Name" >
<dxg:GridColumn.DisplayMemberBinding>
<MultiBinding Converter = "{StaticResource CellBackRoundColorOtTypeConvertor}" >
<Binding Path = "RowData.Row" RelativeSource = "{RelativeSource Mode=FindAncestor, AncestorType = {x:Type UserControl}}" />
<Binding Path = "Listofcolor" RelativeSource = "{RelativeSource Mode=FindAncestor, AncestorType = {x:Type UserControl}}" />
</MultiBinding>
</dxg:GridColumn.DisplayMemberBinding>
</dxg:GridColumn>
</dxg:GridControl>
Здесь <Binding Path = "RowData.Row" RelativeSource = "{RelativeSource Mode=FindAncestor, AncestorType = {x:Type UserControl}}" /> Данные строки передаются конвертеру
Но <Binding Path = "Listofcolor" RelativeSource = "{RelativeSource Mode=FindAncestor, AncestorType = {x:Type UserControl}}" /> Не смог пройти Listofcolor. этого нет в источнике Datagrid. Listofcolor находится в Vm отдельным списком
Преобразователь
public class CellBackRoundColorOtTypeConvertor : MarkupExtension, IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{if (values[0] == DependencyProperty.UnsetValue || values[1] == DependencyProperty.UnsetValue)
// Here values[1] == DependencyProperty.UnsetValue is true
//Some Conversions
}
}
ВМ
public List<Ots> FilterWiseListOfWorkOrder
{
get { return filterWiseListOfWorkOrder; }
set
{
filterWiseListOfWorkOrder = value;
OnPropertyChanged(new PropertyChangedEventArgs("FilterWiseListOfWorkOrder"));
}
}
// This will fill in Ctor of Vm
public List<string> Listofcolor
{
get { return listofcolor; }
set { listofcolor = value; }
}
В: Как передать этот Listofcolor конвертеру?
Пробовал DataContext.Listofcolor и пробовал использовать ElementName тоже
Обновление в комментарии
@Энди, я пытался использовать DataContext.Listofcolor
@Andy Проверить сейчас Разместил все необходимые вещи
Listofcolor не является свойством зависимости. Поставьте точку останова в вашем преобразователе и посмотрите, что вы на самом деле получаете в значениях [1], когда используете DataContext.Listofcolor в качестве пути. Возможно, вы получаете правильные вещи, но ваш код не обрабатывает их должным образом.
@Andy Andy Бесполезно, я добавил ss
Является ли RowData свойством внутри FilterWiseListOfWorkOrder?





Получите доступ к Listofcolor через DataContext, если ваша виртуальная машина является контекстом данных этого пользовательского элемента управления.
<Binding Path = "DataContext.Listofcolor" RelativeSource = "{RelativeSource Mode=FindAncestor, AncestorType = {x:Type UserControl}}" />
tried it DataContext.Listofcolor and tried using ElementName too в вопросе я упомянул, что
каков ваш основной элемент управления, для которого установлен Viewmodel, это окно или пользовательский элемент управления?
usercontrol Это само собой
Пожалуйста, проверьте это сейчас
<Binding Path = "View.DataContext.Listofcolor"/>
Вот чего мне не хватает связь
Вам понадобится Datacontext с привязкой относительно источника, потому что в противном случае он ищет свойство элемента управления. Я удивлен, что ваша первая привязка работает. Возможно, Rowdata - это dp для вашего пользовательского контроля. Я могу только догадываться, потому что вы не дали нам достаточно кода. Не заставляйте нас гадать.