2009-10-20 90 views
0

我試圖從http://msdn.microsoft.com/en-us/magazine/dd882520.aspx中修改WPF工具包的日曆的soltuion,但我在使用usercontrol工作時遇到綁定問題。我試過使用FindAncestor和ElementName,但我只是遇到了一個綁定錯誤。綁定到UserControl的DependencyProperty

我認爲它可能有一些做的提示,它的DataContext的日曆。有沒有其他人有這個問題?

<UserControl x:Class="ChickenPing.MealCalendar" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:conv="clr-namespace:ChickenPing.Converters" 
    xmlns:wpf="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit" 
    xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit" 
    xmlns:vsm="clr-namespace:System.Windows;assembly=WPFToolkit" 
    xmlns:loc="clr-namespace:ChickenPing" 
    x:Name="root"> 
    <wpf:Calendar x:Name="calendar"> 
     <wpf:Calendar.Resources> 
      <conv:IconConverter x:Key="IconConverter"/> 
      <conv:MealCalendarConverter x:Key="MealCalendarConverter" /> 
      <!--LinearGradientBrush x:Key="MealBackgroundFill" StartPoint="0,0" EndPoint="0,1"> 
       <GradientStop Color="" 
      </LinearGradientBrush--> 
     </wpf:Calendar.Resources> 
     <wpf:Calendar.CalendarDayButtonStyle> 
      <Style TargetType="primitives:CalendarDayButton"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="primitives:CalendarDayButton"> 
          <Grid> 
           <!Grid.ToolTip> 
            <ToolTip> 
             <ToolTip.DataContext> 
              <MultiBinding Converter="{StaticResource MealCalendarConverter}"> 
               <Binding Path="PlacementTarget.DataContext" RelativeSource="{x:Static RelativeSource.Self}"/> 
               <Binding Path="Meals"> 
                <Binding.RelativeSource> 
                 <RelativeSource Mode="FindAncestor" AncestorType="{x:Type loc:MealCalendar}" /> 
                </Binding.RelativeSource> 
               </Binding> 
              </MultiBinding> 
             </ToolTip.DataContext> 

的錯誤是:

System.Windows.Data Warning: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='MyAssembly.MyControl', AncestorLevel='1''. BindingExpression:Path=ConversionCollection; DataItem=null; target element is 'ToolTip' (Name=''); target property is 'DataContext' (type 'Object') 

而爲的DependencyProperty聲明:

public static readonly DependencyProperty MealsProperty = DependencyProperty.Register("Meals", typeof(Dictionary<DateTime, IEnumerable<PlannedMealGroup>>), typeof(MealCalendar), new UIPropertyMetadata(new Dictionary<DateTime, IEnumerable<PlannedMealGroup>>())); 
public Dictionary<DateTime, IEnumerable<PlannedMealGroup>> Meals { 
    get { return base.GetValue(MealsProperty) as Dictionary<DateTime, IEnumerable<PlannedMealGroup>>; } 
    set { 
     base.SetValue(MealsProperty, value); 
    } 
} 

還有另外一個控制我在同樣的事情發生,所以我想我可能會丟失一些東西。

+0

我已經更新了我的答案以迴應您的編輯。 – 2009-10-20 17:29:44

回答

0

是ConversionCollection對「MyControl」的用戶控件的屬性?如果是這樣,您需要將此用戶控件的DataContext設置爲它自己,因爲此屬性的默認值爲null。

public MyControl() 
{ 
    DataContext = this; 
} 

編輯:我在你的ConversionCollectionProperty依賴屬性的聲明中注意到你聲明的名稱爲「客人」,但財產實際上是ConversionCollection。這些名稱需要匹配才能讓依賴項屬性按預期運行。

​​
+0

是的。我更新了更詳細的帖子。 – Echilon 2009-10-20 15:41:27

+0

對不起,我真的不知道爲什麼我改了名字。用控件中的實際名稱更新原件。 – Echilon 2009-10-20 17:47:24

相關問題