2009-09-22 3 views
2

Я пытаюсь привязать пользовательский элемент управления в Silverlight 3, и у меня возникают странные проблемы с ним.Проблема привязки настраиваемого элемента управления в silverlight

Мой XAML для пользовательского элемента управления заключается в следующем:

<UserControl x:Class="StronicoMain.GenericSmallIcon" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300" > 
    <Canvas x:Name="canGSI"> 

    </Canvas> 
</UserControl> 

отделенный код для пользовательского элемента управления это

частной строка _EntityTypeID;

public string EntityTypeID 
    { 
     get 
     { 
      return _EntityTypeID; 
     } 

     set 
     { 
      _EntityTypeID = value; 
     } 
    } 

    public GenericSmallIcon() 
    { 
     InitializeComponent(); 
     Loaded += new RoutedEventHandler(Page_Loaded); 
    }   
    public void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     icoMale icoMale = new icoMale(); 
     icoFemale icoFem = new icoFemale(); 

     if (EntityTypeID == null) 
     { 
      canGSI.Children.Add(icoMale); 
     } 
     else if (EntityTypeID == "1") 
     { 
      canGSI.Children.Add(icoMale); 
     } 
     else if (EntityTypeID == "2") 
     { 
      canGSI.Children.Add(icoFem); 
     } 
     else 
     { 
      canGSI.Children.Add(icoMale); 
     }    
    } 

Я звоню его от адаптера DataGridSelection (взято из примера страницы Microsoft Toolkit для AutoCompleteBox-DataGrid версии) - соответствующая часть выглядит следующим образом:

<Stron:DataGridSelectionAdapter x:Name="SelectionAdapter" AutoGenerateColumns="False" IsReadOnly="False"> 
                <Stron:DataGridSelectionAdapter.Columns> 
                 <data:DataGridTemplateColumn> 
                  <data:DataGridTemplateColumn.CellTemplate> 
                   <DataTemplate><Stron:GenericSmallIcon EntityTypeID="{Binding EntityTypeID}"></Stron:GenericSmallIcon></DataTemplate> 
                  </data:DataGridTemplateColumn.CellTemplate> 
                 </data:DataGridTemplateColumn> 
                  <data:DataGridTextColumn Header="Contact Name" FontWeight="Bold" Foreground="#CC000000" Binding="{Binding EntityName}" /> 
                 <data:DataGridTextColumn Header="Tags" Binding="{Binding EntityTags}" />               
                </Stron:DataGridSelectionAdapter.Columns> 
               </Stron:DataGridSelectionAdapter> 

Я бегу код, и я получаю сообщение об ошибке «ManagedRuntimeError # 4004» - если я пытаюсь использовать настраиваемый элемент управления, а вручную настраивать привязку данных, он работает нормально, если я пытаюсь полагаться на значения, которые являются данными, я получаю ошибку. Как создать пользовательское событие привязки данных в пользовательском элементе управления? Я думаю, что это проблема, что страница загружается, прежде чем значения будут переданы ей.

Спасибо всем.

~ Стив


Update, вот рабочий, изменился код согласно принятой ответ

public static readonly DependencyProperty EntityTypeIDProperty = DependencyProperty.Register("EntityTypeID", typeof(string), typeof(GenericSmallIcon), new PropertyMetadata(new PropertyChangedCallback(GenericSmallIcon.OnEntityTypeIDPropertyChanged))); 
public string EntityTypeID 
{ 
    get { return (string)GetValue(EntityTypeIDProperty); } 
    set { SetValue(EntityTypeIDProperty, value); } 
} 
private static void OnEntityTypeIDPropertyChanged(
    DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    GenericSmallIcon control = d as GenericSmallIcon; 
    string b = (string)e.NewValue; 
} 
+0

Можете ли вы опубликовать сообщение innerexception для вашей ошибки? –

ответ

2

Это недействителен:

<Stron:GenericSmallIcon EntityTypeID="{Binding EntityTypeID}"/>

Проблема заключается в том что вы не можете привязываться к свойству, которое не является свойством зависимостей. См. Это MSDN article о превращении вашего имущества POCO в собственность Dependency.

-Mark

+0

Thanks Mark На самом деле не было ссылки на сообщение, просто fyi. –

+0

Извините. Ссылка добавлена. Если вы привяжетесь к нему, это должно быть DP! – markti

Смежные вопросы