2017-02-08 11 views
0

私がここでやろうとしているのは、CheckBoxのクリックで私のRadScheduleView GroupHeaderContentTemplateの外観を変更することです。このCheckBoxは、私のviewmodelのShowPicturesプロパティにバインドされています。各グループの最大高さを設定するためのGroupHeaderHeightプロパティもあります。WPF TELERIK RADSCHEDULEVIEWグループヘッダーコンテンツテンプレートバインディング

プロパティは、以下のように定義される:

private bool _ShowPictures; 
public bool ShowPictures  
{ 
    get 
    { 
     return this._ShowPictures; 
    } 
    set 
    { 
     if (this._ShowPictures == value) 
     { 
      return; 
     }    
     this._ShowPictures = value; 
     this.RaisePropertyChanged(nameof(this.ShowPictures));    
    } 
} 

private int _GroupHeaderHeight; 
public int GroupHeaderHeight 
{ 
    get 
    { 
     return this._GroupHeaderHeight; 
    } 
    set 
    { 
     if (this._GroupHeaderHeight == value) 
     { 
      return; 
     } 

     this._GroupHeaderHeight = value; 
     this.RaisePropertyChanged(nameof(this.GroupHeaderHeight));        
    } 
} 

CheckBoxsコード:

<CheckBox Name="cbShowPictures" Content="Show Pictures" Grid.Column="9" 
    IsChecked="{Binding ShowPictures,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" /> 

マイRadScheduleViewsコード:私は私のviewmodelsコンストラクタで60に真とGroupHeaderHeightにShowPicturesを初期化

<UserControl.Resources> 

<converters:DatabindingDebugConverter x:Key="DatabindingDebugConverter"/> 
<BooleanToVisibilityConverter x:Key="BoolToVis"/> 

<telerik:RadScheduleView x:Name="MainSchedule" 
    Grid.Row="0" 
    Margin="2" 
    TimeMarkersSource="{Binding TimeMarkers}" 
    CategoriesSource="{Binding Categories}" 
    MinAppointmentHeight="25" 
    NavigationHeaderVisibility="Visible" 
    AppointmentsSource="{Binding WorkOrderTasks,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    AppointmentCreated="MainSchedule_AppointmentCreated" 
    ResourceTypesSource="{Binding ResourceTypes}" 
    AppointmentDeleted="MainSchedule_AppointmentDeleted" 
    AppointmentEdited="MainSchedule_AppointmentEdited" 
    CurrentDate="{Binding FilterStart,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    SelectedAppointment="{Binding SelectedWorkOrderTask, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    FirstVisibleTime="8:00:00" 
    ShowAppointmentDeleteButton="False" 
    ToolTipTemplate="{StaticResource AppointmentToolTipTemplate}"> 

     <telerik:RadScheduleView.ViewDefinitions> 
      <telerik:TimelineViewDefinition MinTimeRulerExtent="1" 
       MaxTimeRulerExtent="Infinity" 
       MinorTickLength="1h" 
       DayStartTime="{Binding DailyStartTime, Mode=TwoWay}" 
       DayEndTime="{Binding DailyEndTime, Mode=TwoWay}" 
       VisibleDays="{Binding VisibleDays, Mode=TwoWay}"                   
       StretchGroupHeaders="True" 
       StretchAppointments="True"/> 

     <telerik:DayViewDefinition DayStartTime="{Binding DailyStartTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       DayEndTime="{Binding DailyEndTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       VisibleDays="{Binding VisibleDays, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"                 
       StretchGroupHeaders="False" 
       MinTimeRulerExtent="1" 
       MaxTimeRulerExtent="Infinity" 
       MinorTickLength="1h" /> 

     <telerik:WeekViewDefinition DayStartTime="{Binding DailyStartTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       DayEndTime="{Binding DailyEndTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       VisibleDays="{Binding VisibleDays, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"                 
       StretchGroupHeaders="False" 
       MinTimeRulerExtent="1" 
       MaxTimeRulerExtent="Infinity" 
       MinorTickLength="1h"/> 

      <telerik:MonthViewDefinition DayStartTime="{Binding DailyStartTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       DayEndTime="{Binding DailyEndTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       VisibleDays="{Binding VisibleDays, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"                 
       StretchGroupHeaders="False" 
       MinTimeRulerExtent="1" 
       MaxTimeRulerExtent="Infinity"/> 

      <telerik:CustomViewDefinition DayStartTime="{Binding DailyStartTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       DayEndTime="{Binding DailyEndTime, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
       VisibleDays="{Binding VisibleDays, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"                 
       StretchGroupHeaders="False" 
       MinTimeRulerExtent="1" 
       MaxTimeRulerExtent="Infinity" 
       MinorTickLength="1h"/> 

     </telerik:RadScheduleView.ViewDefinitions> 
     <telerik:RadScheduleView.ActiveViewDefinition> 
       <telerik:TimelineViewDefinition MinTimeRulerExtent="1" 
               MaxTimeRulerExtent="Infinity" 
               MinorTickLength="1h" 
               DayStartTime="{Binding DailyStartTime, Mode=TwoWay}" 
               DayEndTime="{Binding DailyEndTime, Mode=TwoWay}" 
               VisibleDays="{Binding VisibleDays, Mode=TwoWay}"                   
               StretchGroupHeaders="False" 
               StretchAppointments="False"/> 
     </telerik:RadScheduleView.ActiveViewDefinition> 

     <telerik:RadScheduleView.AppointmentItemContentTemplate> 
      <DataTemplate> 
       <StackPanel Margin="4 2" MinHeight="20" > 
        <TextBlock Text="{Binding Subject}" FontWeight="Bold" /> 
        <TextBlock Text="{Binding Appointment.Body}" TextWrapping="Wrap" /> 
        <TextBlock Text="Time Range" Foreground="{StaticResource StrongBrush}"/> 
        <StackPanel Orientation="Horizontal" Margin="4 0"> 
         <TextBlock Text="{Binding Path=Start, StringFormat='MMM dd, yyyy HH:MM'}" 
         FontWeight="SemiBold" Foreground="{StaticResource AccentBrush}" /> 
         <TextBlock Text=" - " Foreground="{StaticResource AccentBrush}" /> 
         <TextBlock Text="{Binding Path=End, StringFormat='MMM dd, yyyy HH:MM'}" 
         FontWeight="SemiBold" Foreground="{StaticResource AccentBrush}" /> 
        </StackPanel> 
       </StackPanel> 
      </DataTemplate> 
     </telerik:RadScheduleView.AppointmentItemContentTemplate> 

     <telerik:RadScheduleView.GroupDescriptionsSource> 
      <telerik:GroupDescriptionCollection> 
       <schedule:ResourceGroupDescription ResourceType="Equipment" /> 
      </telerik:GroupDescriptionCollection> 
     </telerik:RadScheduleView.GroupDescriptionsSource> 
     <telerik:RadScheduleView.GroupHeaderContentTemplate> 
      <DataTemplate> 
       <Border Background="{Binding Name.Brush}" Width="140" Height="{Binding GroupHeaderHeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="1 1 1 0"> 
        <StackPanel Margin="10 10 10 10"> 
         <Image Margin="5 0 10 0" Height="60" Width="60" Visibility="{Binding ShowPictures, Converter= {StaticResource BoolToVis}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
           HorizontalAlignment="Left" Stretch="UniformToFill" Source="{Binding Name.Photo}" /> 
         <TextBlock Text="{Binding FormattedName}" TextWrapping="Wrap" Margin="8 0" VerticalAlignment="Center" /> 
        </StackPanel> 
       </Border>          
      </DataTemplate> 
     </telerik:RadScheduleView.GroupHeaderContentTemplate> 
     <telerik:RadScheduleView.TimeRulerItemStyleSelector> 
      <local:GroupItemStyleSelector> 

       <local:GroupItemStyleSelector.GroupItemStyle> 
        <Style TargetType="telerik:TimeRulerGroupItem"> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="telerik:TimeRulerGroupItem"> 
            <Border BorderBrush="{StaticResource BasicBrush}" BorderThickness="1 1 0 0"> 
             <ContentPresenter Margin="4 2" /> 
            </Border> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </local:GroupItemStyleSelector.GroupItemStyle> 

      </local:GroupItemStyleSelector> 
     </telerik:RadScheduleView.TimeRulerItemStyleSelector> 
    </telerik:RadScheduleView> 

。ゲッターとセッターは呼び出されますが、視覚的に変化はありません。 ここでの目標は、表示画像を有効にしたときです。グループヘッダーテンプレートに画像を表示し、高さを上げますが、無効にしても画像は表示されず、高さも低くなります。

私がこれを改善する方法やエラーについては、アドバイスをいただければ幸いです。

コードが不足している場合は、質問があれば追加します。

+0

この問題は、DataGrid Columns Bindingの問題と似ている必要があります。 [my answer](http://stackoverflow.com/a/42086700/5615980)と提供されたリンクを参照してください。 – Ron

答えて

1

は私がShowPicturesGroupHeaderHeight性質がTimeMarkersCategoriesなどのプロパティと同じクラスで定義された後、あなたがGroupHeaderContentTemplateからそれらに特異的に結合することができるようにRelativeSourceを使う必要がありますね:

<DataTemplate> 
    <Border Background="{Binding Name.Brush}" Width="140" Height="{Binding DataContext.GroupHeaderHeight, RelativeSource={RelativeSource AncestorType=telerik:RadScheduleView}}" Margin="1 1 1 0"> 
     <StackPanel Margin="10 10 10 10"> 
      <Image Margin="5 0 10 0" Height="60" Width="60" Visibility="{Binding DataContext.ShowPictures, Converter={StaticResource BoolToVis}, RelativeSource={RelativeSource AncestorType=telerik:RadScheduleView}}" 
           HorizontalAlignment="Left" Stretch="UniformToFill" Source="{Binding Name.Photo}" /> 
      <TextBlock Text="{Binding FormattedName}" TextWrapping="Wrap" Margin="8 0" VerticalAlignment="Center" /> 
     </StackPanel> 
    </Border> 
</DataTemplate> 
+0

画像hide/showは成功ですが、テンプレートの高さは、radscheduleviewが元に戻されたときにのみ変更されます。私はそれを動的に変更する必要があります...返信いただきありがとうございますmm8 –

+0

イメージが再度表示されるように設定すると高さが増加しますが、イメージが折りたたまれた後は高さが減少しません –

関連する問題