Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从类的属性更改Textblock的文本值_C#_Wpf_Xaml - Fatal编程技术网

C# 如何从类的属性更改Textblock的文本值

C# 如何从类的属性更改Textblock的文本值,c#,wpf,xaml,C#,Wpf,Xaml,请原谅我的WPF水平低。我的项目遇到了一个问题。我在usercontrol中有一个公式,当用户单击选项卡时,它会显示给用户。我还将名称选项卡的值存储到抽象类的属性中。我希望用名称选项卡的相关属性填充公式 要做到这一点,我知道我需要将绑定方法与textblock的文本属性一起使用。我尝试了很多方法来实现这一点,但都失败了 让我们展示一些代码,这是我的xaml: <TextBlock Name="nomEcole" Text="{Binding NomEcole, UpdateSourceTr

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

要做到这一点,我知道我需要将绑定方法与textblock的文本属性一起使用。我尝试了很多方法来实现这一点,但都失败了

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

<TextBlock Name="nomEcole" Text="{Binding NomEcole, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" Style="{StaticResource Heading2}" Margin="10,10,0,0" />
还有我的抽象类_nomecolevisialisee的值通过一个方法更新:

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

谢谢你的帮助!我还想知道,我真的不知道我的项目是否看起来像MVVM。

绑定不会像这样工作,因为您的属性位于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");
            }
        }
    }
}
 public EcoleControl()
    {
        this.DataContext = new EcoleViewModel();
        InitializeComponent();
    }
然后,您可以在usercontrol的ctor中设置DataContextin,如下所示:

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");
            }
        }
    }
}
 public EcoleControl()
    {
        this.DataContext = new EcoleViewModel();
        InitializeComponent();
    }

现在绑定应该可以工作了。

不是真正的mvvm,您已经反转了:用户控件不能实现INotifyPropertyChanged,而是RelationEcoles。请查看现有代码,因为您走错了方向。那么您将绑定到的NomEcole属性设置在哪里?@mm8我在RelationEcoles类的方法中设置了它,当我单击一个现代选项卡链接时,我应用该方法来更改属性的值。因此RelationEcoles具有对UserControl的引用?这毫无意义,肯定打破了MVVM模式。请张贴一些可复制的代码。我可以通过邮件或类似的方式将我的项目发送给你吗?唯一的问题是从您无法从设备访问的数据库中获取我的数据。OP将DataContext设置为包含NomEcole属性的EcoleControl的当前实例。基本上和你做的一样。它位于xaml.cs文件中这一事实对于绑定来说并不重要,绑定是在DataContext中查找的。为ViewModel创建一个单独的类不是强制性的,我怀疑它能否解决问题。@3615 OP还询问他是否违反了MVVM模式。但您是对的,解决方案只是将属性移动到viewmodel,并绑定到该属性的实例。尽管如此,这个绑定应该可以工作,如果不行,您可以尝试保存一个string类型的私有字段,并在MainViewModel的某个地方使用它而不是Nom属性。谢谢您的回答。我试过你的解决办法,但还是不管用。属性的名称似乎在更改时没有更新。@BallyMathieu很难找出问题所在,因为我们不知道getter和setter真正在做什么。能否尝试使用_nomEcole字段作为EcoleViewModel中nomEcole属性的支持字段,并检查输出窗口中是否有任何错误消息?我认为绑定可以工作,因为它显示了我在构造函数中引用的原始名称。但是属性更改时,显示的名称没有更改。也许有一件事不见了?