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" />

これは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 }"  />

(パス内の名前の大文字と小文字の変更に注意してください。ItemsControlのXAMLをTemplateForPlanUCに投稿する場合は、私の回答にあなたのケースに適した例を含めます)。

SelectedTemplateまた、コントロールにINotifyPropertyChangedを実装し、プロパティがセッターで通知することを確認する必要があります。StackOverflowでこれまでに何十億回も取り上げられてきたため、ここでは詳しく説明しません。

于 2012-05-31T06:02:39.357 に答える