2016-04-13 43 views
0

Bir WPF penceresinde, bir RadComboBox'ı (ancak normal bir Combobox ile aynı sorun) statik bir kaynağa yerleştiriyorum. İyi çalışıyor.Nesneye bağla ItemContainerStyle

Şimdi, her bir öğeyi ComboboxItem'in dışından bir nesneye karşı kontrol etmek istiyorum. Nesneyi açılan kutudan ve WPF penceresine ait olandan alarak bir Multivalue-Converter (ki bu da iyi çalışıyor) yazdım.

Açılan kutularda Görev Türleri var ve ana nesneye Görev denir.

Nokta 1: <Binding Path=""/> kullanarak Açılan kutu-öğesi alıyorum - ama bu doğru mu?

Nokta 2 (ve bunu anlayamadığım bir tanesi): WPF formunun sahibi olduğu nesneye nasıl giderim?

, Windows DataContext olarak kodda (şimdilik) DataContext="{Binding RelativeSource={RelativeSource Self}}"

Görev nesne yalanlarla ayarlanır

:

<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> 

teşekkür ederiz: Bu benim combobox ne

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

yardımın için!

cevap

0

Tamam, iyi bir gece uykusu sonra ben bu çözmek için kendimi nasıl bulundu:

<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> 

Yolu Bağlama =. Öğeyi kendisi alır

DataConntext'in sahibi olan Pencereyi, MultiConverter için RelativeSource olarak gerekli ikinci nesneyle birlikte, istediğimi alıyorum ve her şey çekicilik gibi çalışır.