【问题标题】:WPF I don't get binding between Label and Texblock to workWPF 我没有在 Label 和 Texblock 之间绑定工作
【发布时间】:2019-08-07 16:40:08
【问题描述】:

我一直在尝试不同的方法,但没有成功。所以这是我的问题:我想将我在文本块上键入的内容绑定到标签。没什么特别的,但我想在此基础上构建其他东西。这是我的代码:

MainWindow.Xaml

<StackPanel Orientation="Vertical">
    <TextBox Text="{Binding Path=Name2, ElementName=window, UpdateSourceTrigger=PropertyChanged}"/>
    <TextBlock Text="{Binding Path=Name2, ElementName=window, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>

MainWindow.xaml.cs

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    private string _name2;

    public string Name2
    {
        get { return _name2; }
        set
        {
            if (value != _name2)
            {
                _name2 = value;
                OnPropertyChanged("Name2");
            }
        }
    }

    public MainWindow()
    {
        InitializeComponent();
    }
}

我的期望是在我在文本块上键入时看到标签发生变化,我已经使用 Xamarin 完成了很多次,但我无法让它在 WPF 上工作。我错过了什么?

提前致谢。

【问题讨论】:

  • 你设置DataContext了吗?
  • 你好@Sach,不。我以前试过,可能做错了。由于我在 MainWindow.xaml.cs 上创建了依赖属性,我还需要在 XAML 文件上设置数据源吗?如果是,怎么做?
  • window(小写)在哪里声明?
  • @Peregrine 这是我从我正在阅读的一篇文章中添加的内容,但忘记删除它。无论有没有它,它都不起作用。抱歉,我不记得这篇文章了。
  • 这确实是一种奇怪的构造数据绑定的方式——在 MVVM 中,通常的方式是创建一个 ViewModel 类来保存属性,并将窗口的 DataContext 设置为此类的一个实例。

标签: c# wpf mvvm binding


【解决方案1】:

要使您的绑定起作用,MainWindow 属性 Name 必须设置为“窗口”。

<Window ...
        Name="window">

然后,在构造函数中,设置DataContext:

public MainWindow()
{
    InitializeComponent();
    DataContext = this;
}

注意:

但是,为了使数据绑定和MVVM 有意义,您应该真正考虑使用ViewModel 并将ViewViewModel 分开。

注意2:

正如评论者所指出的,您不需要同时执行上述两项操作。两者中的任何一个都足够了。

【讨论】:

  • 是的,现在我知道了基础知识,我将遵循 MvvM 最佳实践。
  • 我会的,它说我要等 1 分钟。
  • 请注意:如果您使用 ElementName 绑定到对象,则无需设置数据上下文。您通常会使用一种方法或另一种方法,但不会同时使用两种方法。
猜你喜欢
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2011-04-04
  • 2023-03-06
  • 2011-02-04
  • 1970-01-01
相关资源
最近更新 更多