0

我的标签没有显示任何内容。我想要做的是我有一个用户控件 TemplateForPlan,我从该用户控件中获取选定的项目,然后我将进入下一个用户控件,并且该选定的模板名称必须存在于标签内容中。

抱歉描述不佳。我是新手,刚开始研究 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;
        }
    }
}

还请提供一些好的链接,以便我可以正确理解绑定。我对此感到非常困惑。

4

1 回答 1

1

您不能绑定到字段。

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

public TemplateType SelectedTemplate { get; set; }

然后更改您的标签绑定:

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

(请注意路径中名称大写的变化。如果您在 TemplateForPlanUC 中发布 ItemsControl 的 XAML,那么我将在我的回答中包含一个适合您情况的示例)。

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

于 2012-05-31T06:02:39.357 回答