如何从类的属性更改Textblock的Text值

时间:2017-03-28 07:59:10

标签: c# wpf xaml

请原谅我在WPF中的低级别。我的项目遇到了问题。我在usercontrol中有一个公式,当用户单击选项卡时会显示给用户。我还将名称选项卡的值存入我的抽象类的属性中。我希望表格填充名称标签的相关属性。

为此,我知道我需要将绑定方法与我的textblock的text属性一起使用。我尝试了很多方法来实现它,但它们都失败了。

让我们展示一些代码,有我的xaml:

<TextBlock Name="nomEcole" Text="{Binding NomEcole, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" Style="{StaticResource Heading2}" Margin="10,10,0,0" />

有用户控件:

public partial class EcoleControl : UserControl, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void FirePropertyChanged(string name)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }

    private string _nomEcole;
    public string NomEcole
    {
        get { return MainWindow._RE.EcoleVisualisee.Nom; }
        set
        {
            if (MainWindow._RE.EcoleVisualisee.Nom != value)
            {
                MainWindow._RE.EcoleVisualisee.Nom = value;
                this.FirePropertyChanged("NomEcole");
            }
        }
    }

    public EcoleControl()
    {
        this.DataContext = this;
        InitializeComponent();
    }
}

还有我的抽象类(_nomEcoleVisualisee的值由方法更新):

class RelationEcoles
{
    private string _nomEcoleVisualisee;
    public string NomEcoleVisualisee
    {
        get { return _nomEcoleVisualisee; }
        set { this._nomEcoleVisualisee = value; }
    }
}

感谢您的帮助!我也想知道,我真的不知道我的项目是否像MVVM一样。

1 个答案:

答案 0 :(得分:0)

绑定不会像这样工作,因为您的属性位于usercontrol的.cs文件中。

通常你会有EcoleViewModel来实现INPC并持有这样的属性:

public class EcoleViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void FirePropertyChanged(string name)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }

    private string _nomEcole;
    public string NomEcole
    {
        get { return MainWindow._RE.EcoleVisualisee.Nom; }
        set
        {
            if (MainWindow._RE.EcoleVisualisee.Nom != value)
            {
                MainWindow._RE.EcoleVisualisee.Nom = value;
                this.FirePropertyChanged("NomEcole");
            }
        }
    }
}

然后你可以在你的usercontrol的ctor中设置DataContext,如下所示:

 public EcoleControl()
    {
        this.DataContext = new EcoleViewModel();
        InitializeComponent();
    }

现在绑定应该有效。