2016-04-13 7 views
0

В окне WPF я заполняю RadComboBox (но такую ​​же проблему с обычным Combobox) со статическим источником. Работает отлично.Привязать к объекту изнутри ItemContainerStyle

Теперь я хочу проверить каждый элемент на объект вне объекта ComboboxItem. Я написал Multivalue-Converter (который тоже отлично работает), беря объект из элемента combobox и ne, принадлежащего окну WPF.

В combobox у меня есть типы задач, а основной объект называется Task.

Пункт 1: Использование <Binding Path=""/> Я получаю элемент combobox - но это правильно?

Пункт 2 (и один я не могу вычислить): Как мне добраться до объекта Задача, принадлежащая форме WPF?

окон DataContext устанавливается DataContext="{Binding RelativeSource={RelativeSource Self}}"

объекта Task лежит (на данный момент) в коде позади, как:

private Task task; 
public Task Task 
{ 
    get { return this.task; } 
    set 
    { 
     this.task = value; 
     NotifyPropertyChanged("Task"); 
    } 
} 

Это мой выпадающий:

<telerik:RadComboBox Grid.Row="0" Grid.Column="1" Margin="6,6,6,2" Padding="10,0,0,0" VerticalContentAlignment="Center" ItemsSource="{Binding Source={StaticResource applicationBase}, Path=TaskTypes.TaskTypes}" DisplayMemberPath="Name" SelectedValue="{Binding Path=Task.TaskType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" telerik:StyleManager.Theme="Windows8Touch" FontSize="16" IsEnabled="{Binding Path=IsEnabledState, Mode=TwoWay}"> 
    <telerik:RadComboBox.ItemContainerStyle> 
    <Style TargetType="{x:Type telerik:RadComboBoxItem}"> 
     <Setter Property="IsEnabled"> 
     <Setter.Value> 
      <MultiBinding Converter="{StaticResource ConverterTaskTypeEnabled}"> 
      <Binding Path=""/> 
      <Binding Path="Task" /> 
      </MultiBinding> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </telerik:RadComboBox.ItemContainerStyle> 
</telerik:RadComboBox> 

Спасибо для вашей помощи!

ответ

0

Ok, после хорошего ночного сна я узнал себя, как решить эту проблему:

<telerik:RadComboBox Grid.Row="0" Grid.Column="1" Margin="6,6,6,2" Padding="10,0,0,0" VerticalContentAlignment="Center" ItemsSource="{Binding Source={StaticResource applicationBase}, Path=TaskTypes.TaskTypes}" DisplayMemberPath="Name" SelectedValue="{Binding Path=Task.TaskType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" telerik:StyleManager.Theme="Windows8Touch" FontSize="16" IsEnabled="{Binding Path=IsEnabledState, Mode=TwoWay}"> 
    <telerik:RadComboBox.ItemContainerStyle> 
     <Style TargetType="{x:Type telerik:RadComboBoxItem}"> 
      <Setter Property="IsEnabled"> 
       <Setter.Value> 
        <MultiBinding Converter="{StaticResource ConverterTaskTypeEnabled}"> 
         <Binding Path="."/> 
         <Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="Task.TaskCategoryId" /> 
        </MultiBinding> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </telerik:RadComboBox.ItemContainerStyle> 
</telerik:RadComboBox> 

Связывание с Path =. получает сам предмет

Используя окно, которому принадлежит DataContext с требуемым вторым объектом как RelativeSource для моего MultiConverter, я получаю то, что хочу, и все работает как шарм.