2011-05-14 76 views
1

我试图使用转换器类根据DatePicker中的日期在ComboBox中标记名称。将DatePicker的日期绑定到ConverterParameter

我目前的问题是我不知道如何将DatePicker的日期绑定到“ConverterParameter”。有什么建议么?

(在我的代码可能更多的错误,但我又卡在了这一点)

<Page.Resources> 
    <Style TargetType="ComboBoxItem" x:Key="combostyle"> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ComboBoxItem"> 
        <ControlTemplate.Resources> 
         <src:ColorFromMagazijnierIdConverter x:Key="conv" /> 
        </ControlTemplate.Resources> 

        <Grid ToolTip="{Binding Converter={StaticResource conv}, ConverterParameter={ BIND THIS TO THE DATEPICKER DATE }, Mode=OneWay}"> 
         <Rectangle x:Name="MarkedItemBackground" IsHitTestVisible="False" Fill="#80FF0000" /> 
         <!--...--> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <DataTrigger Binding="{Binding Converter={StaticResource conv}}" 
             Value="{x:Null}"> 
          <Setter TargetName="MarkedItemBackground" 
             Property="Visibility" Value="Hidden" /> 
         </DataTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Page.Resources> 
<Grid Margin="10,10,10,0" Name="rootGrid"> 
    <ComboBox Name="collectMagazijnierComboBox" 
       DisplayMemberPath="User.Name" 
       ItemContainerStyle="{DynamicResource ResourceKey=combostyle}"/> 
    <DatePicker Name="collectDatePicker" /> 
</Grid> 

回答

5

的ConverterParameter属性不能有约束力的目标。只有DependencyObject的DependencyProperty可以作为绑定的目标。

你需要使用一个MultiBinding:

<Grid> 
    <Grid.ToolTip> 
     <MultiBinding Converter="{StaticResource conv}" Mode="OneWay"> 
      <Binding /> <!-- this mimics your current binding to the datacontext itself --> 
      <Binding ElementName="collectDatePicker" Path="SelectedDate" /> 
     </MultiBinding> 
    </Grid.ToolTip> 

    <Rectangle x:Name="MarkedItemBackground" IsHitTestVisible="False" Fill="#80FF0000" /> 

    <!--...--> 

</Grid> 

然后您就需要重写你的ColorFromMagazijnierIdConverter转换器来实现IMultiValueConverter接口代替,在其中您可以访问这两个值。

虽然,我不是100%确定是否可以通过类似资源中的ElementName引用collectDatePicker。但确定你可以玩它!

+0

非常感谢您的明确解释。您确实可以像样式一样从样式资源中通过ElementName引用collectDatePicker。 – VDP 2011-05-16 12:26:19