2012-05-31 2 views
0

мой ярлык не показывает содержание. что я пытаюсь сделать, так это у меня есть usercontrol TemplateForPlan, и я получаю выбранный элемент из этого usecontrol, и после этого я перехожу к следующему usercontrol и что выбранное имя шаблона должно быть там в содержании метки.Связывание метки не работает

извините за плохой описание. Я новичок и только начал работать над WPF.

<UserControl x:Class="ChaosMonkeyUI.TemplateForPlan" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="344" d:DesignWidth="424" Name="TemplateForPlanUC"> 

и это это метка на другой UC, чтобы показать выбранный шаблон

<Label Content="{Binding ElementName=TemplateForPlanUC, Path=selectedTemplate.TemplateName }" Grid.Row="1" Grid.Column="1" Height="28" HorizontalAlignment="Stretch" 
     Name="labelTemplateName" VerticalAlignment="Stretch" Margin="10,5,0,5" /> 

это .cs файл TemplateForPlan и

public partial class TemplateForPlan : UserControl 
{ 
    IList<TemplateType> template; 
    public int noOfElementSelected; 
    TemplateHelper xmlParser ; 
    NewChaosSteps parentNewChaosStepPageForNextButton; 
    public TemplateType selectedTemplate = null; 

    public TemplateForPlan(NewChaosSteps parentNewChaosStepPageForNextButton) 
    { 
     InitializeComponent(); 
     this.parentNewChaosStepPageForNextButton = parentNewChaosStepPageForNextButton; 
     parentNewChaosStepPageForNextButton.EnableOrDisableNextButton("disable"); 
     xmlParser = new TemplateHelper(); 
     template = xmlParser.GetTemplates(); 
     listTemplate.ItemsSource = template; 
    } 

    private void listTemplate_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     selectedTemplate = template[listTemplate.SelectedIndex]; 
     parentNewChaosStepPageForNextButton.EnableOrDisableNextButton("enable"); 
    } 

и TemplateType определяется в других проект и его защита:

public partial class TemplateType 
{ 

    private TemplateRuleType[] templateRuleField; 

    private string templateNameField; 

    private string templateDescriptionField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("TemplateRule")] 
    public TemplateRuleType[] TemplateRule { 
     get { 
      return this.templateRuleField; 
     } 
     set { 
      this.templateRuleField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string TemplateName { 
     get { 
      return this.templateNameField; 
     } 
     set { 
      this.templateNameField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string TemplateDescription { 
     get { 
      return this.templateDescriptionField; 
     } 
     set { 
      this.templateDescriptionField = value; 
     } 
    } 
} 

, пожалуйста, также дайте хорошую ссылку, чтобы я мог правильно понять привязку. я очень смущен в этом.

+0

Coul dyou добавить код класса TemplateType? Я предполагаю, что он не реализует INotifyPropertyChanged. –

+0

Я не вижу, где вы создаете объект TemplateForPlan. Вы объявляете, что это такое, но вы не определили его или не создали дерево визуальных элементов в любом месте этого кода. Связывание в вашей метке может только обращаться к именам элементов в одном и том же визуальном дереве. Покажите больше файла, в котором вы объявили ярлык. Вам необходимо создать экземпляр объекта TemplateForPlan в том же файле, чтобы привязываться к нему. И даже тогда, чтобы привязка к работе вам нужно либо реализовать DependencyProperty, либо INotifyPropertyChanged. –

+0

Класс TemplateType определен в другом проекте. – RATHI

ответ

1

Вы не можете привязываться к полю.

listTemplate - элемент управления, поэтому у него будет свойство SelectedItem, которое вы можете привязать к свойству в вашем коде.

public TemplateType SelectedTemplate { get; set; } 

Затем измените метку связывания:.

<Label Content="{Binding ElementName=TemplateForPlanUC, Path=SelectedTemplate.TemplateName }" /> 

(Обратите внимание на изменение капитализации имени в пути Если вы после XAML для вашего ItemsControl в TemplateForPlanUC тогда я включу пример, соответствует вашему делу в моем ответе).

Вам также необходимо убедиться, что вы реализуете INotifyPropertyChanged на вашем элементе управления и убедитесь, что ваше свойство SelectedTemplate уведомляет его установщика. Я не буду подробно описывать это здесь, потому что он был покрыт миллиард раз до этого на StackOverflow.

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