C# 如何从类的属性更改Textblock的文本值
请原谅我的WPF水平低。我的项目遇到了一个问题。我在usercontrol中有一个公式,当用户单击选项卡时,它会显示给用户。我还将名称选项卡的值存储到抽象类的属性中。我希望用名称选项卡的相关属性填充公式 要做到这一点,我知道我需要将绑定方法与textblock的文本属性一起使用。我尝试了很多方法来实现这一点,但都失败了 让我们展示一些代码,这是我的xaml:C# 如何从类的属性更改Textblock的文本值,c#,wpf,xaml,C#,Wpf,Xaml,请原谅我的WPF水平低。我的项目遇到了一个问题。我在usercontrol中有一个公式,当用户单击选项卡时,它会显示给用户。我还将名称选项卡的值存储到抽象类的属性中。我希望用名称选项卡的相关属性填充公式 要做到这一点,我知道我需要将绑定方法与textblock的文本属性一起使用。我尝试了很多方法来实现这一点,但都失败了 让我们展示一些代码,这是我的xaml: <TextBlock Name="nomEcole" Text="{Binding NomEcole, UpdateSourceTr
<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属性的支持字段,并检查输出窗口中是否有任何错误消息?我认为绑定可以工作,因为它显示了我在构造函数中引用的原始名称。但是属性更改时,显示的名称没有更改。也许有一件事不见了?