2015-07-01 3 views
1

У меня есть Combobox и DataGrid. Я хочу, чтобы иметь возможность выбирать значение в Combobox (SelectedItem - привязка данных к свойству ViewModel). Если значение ячейки определенного столбца в DataGrid соответствует значению combobox, я хочу изменить цвет границы всей строки. Я нашел способы изменить цвет границы DataGrid с помощью конвертера, но ConverterParameter не может быть привязан к свойству SelectedItem, потому что это не DependancyProperty или DependancyObject. Любые идеи относительно того, как я могу это сделать? Благодаря!Изменить цвет границы DataGrid на основе свойства в ViewModel

+0

Почему бы не использовать Javascript .. ..собенно JQuery? – code

+0

Это настольное приложение WPF. – Paul

+0

Извините, я должен был прочитать теги – code

ответ

1

Использование мульти-связывания с преобразователем многозначного в DataTriggers из ваших DataGridRow.Style:

Xaml:

<Window.Resources> 
    <local:MultiConverter x:Key="multiConv"/> 
</Window.Resources> 
... 

    <DataGrid ItemsSource="{Binding ViewModel.MyList}" > 
     <DataGrid.RowStyle > 
      <Style TargetType="{x:Type DataGridRow}"> 
       <Style.Triggers> 
        <DataTrigger Value="true"> 
         <DataTrigger.Binding> 
          <MultiBinding Converter="{StaticResource multiConv}"> 
           <Binding Path="ColorColumn" /> 
           <Binding Path="ViewModel.SelectedColor" RelativeSource="{RelativeSource Mode=FindAncestor, 
               AncestorType=Window}"/> 
          </MultiBinding> 
         </DataTrigger.Binding> 
         <Setter Property="BorderBrush" Value="Red" /> 
         <Setter Property="BorderThickness" Value="1" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 
    </DataGrid> 
    <ComboBox ItemsSource="{Binding ViewModel.ColorList}" 
       SelectedItem="{Binding ViewModel.SelectedColor}"/> 

Multi-значение преобразователя:

public class MultiConverter : IMultiValueConverter 
{ 
    public object Convert(
     object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values[0] is MyColorType && 
      values[1] is MyColorType && 
      // if ComboBox.SelectedColor == CurrentDataGridRow.ColorColumn 
      (MyColorType)values[0] == (MyColorType)values[1]) 
      return true; 

     return false; 
    } 

    public object[] ConvertBack(
     object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 
+0

Я также нашел этот метод после того, как я разместил исходный вопрос. Вместо этого было добавлено свойство Brush для ViewModel для записи и привязка значения параметра setter для BorderBrush к этому новому свойству, которое казалось более простым способом выполнить задание. Я, скорее всего, изменю его на этот метод, когда у меня есть дополнительное время. Спасибо @Bahman_Aries !! – Paul

+0

приветствую :) –

Смежные вопросы