标签的绑定不起作用

时间:2012-05-31 05:46:43

标签: wpf

我的标签没有显示任何内容。我想要做的是我有一个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" />

这是 TemplateForPlan

的.cs文件
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;
        }
    }
}

还请给出一些好的链接,以便我能正确理解绑定。我非常困惑。

1 个答案:

答案 0 :(得分:1)

您无法绑定到某个字段。

listTemplate是一个项控件,因此它将具有SelectedItem属性,您可以将其绑定到代码后面的属性。

public TemplateType SelectedTemplate { get; set; }

然后更改标签绑定:

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

(注意路径中名称大小写的变化。如果你在TemplateForPlanUC中为你的ItemsControl发布XAML,那么我将在我的回答中包含一个适合你案例的例子。)

您还需要确保在控件上实现INotifyPropertyChanged,并确保您的SelectedTemplate属性在其setter中通知。我不会在这里详述,因为它在StackOverflow之前已经被覆盖了十亿次。