繁体   English   中英

WPF绑定控件

[英]WPF binding controls

我刚刚开始学习WPF桌面应用程序。 我在下面写了一些简单的代码来执行绑定操作。

问题是:我想要在TextBox中键入sth并在TextBlock中同时看到它,但是在编译和运行应用程序之后,窗体上的控件无法像我所描述的那样运行。

有人可以帮我解决吗?

MainWindow.xaml:

<Window x:Class="Napisy.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Napisy"
        xmlns:mv="clr-namespace:Napisy.ModelWidoku"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <mv:NapisyModelWidoku x:Key="napisyModelWidoku"/>
    </Window.Resources>  

    <Grid DataContext="{StaticResource napisyModelWidoku}">
        <Grid.RowDefinitions>
            <RowDefinition Height="1*"/>
            <RowDefinition Height="2*"/>
            <RowDefinition Height="2*"/>
            <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
        <TextBox Grid.Row="1" Margin="10,10,10,10" Text="{Binding Path=Tekst,Mode=TwoWay}"/>
        <TextBlock Grid.Row="2" Margin="10,10,10,10" Text="{Binding Path=Wyswietl,Mode=OneWay}"/>
    </Grid>
</Window>

ViewModel代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Napisy.Model;
using System.ComponentModel;

namespace Napisy.ModelWidoku
{
    public class NapisyModelWidoku : INotifyPropertyChanged
    {
        NapisyModel model = new NapisyModel();

        public string Tekst
        {
            get
            {
                return model.Tekst;
            }
            set
            {
                model.Tekst = value;
                OnPropertyChanged(nameof(Tekst));
                OnPropertyChanged(nameof(Wyswietl));
            }
        }
        public string Wyswietl
        {
            get
            {
                return model.Tekst;
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;

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

型号代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Napisy.Model
{
    public class NapisyModel
    {
        public string Tekst { get; set; }
    }
}

编辑:

  • 问题描述,
  • 在NapisyModelWidoku类之前,添加了修饰符public,
  • 添加了OnPropertyChanged(nameof(Tekst));
  • 而是OnPropertyChanged(“ Wyswietl”); 使用OnPropertyChanged(nameof(Wyswietl));

在TextBox中输入文本后,TextBlock仍不会自动刷新。 仍然希望我收到提示。 谢谢

我运行了您的代码,但它不起作用,因为PropertyChanged为null。 您必须设置视图的数据上下文,以便可以绑定PropertyChangedEventHandler。

在后面添加代码,即MainWindow.xaml.cs

public MainWindow()
{
     InitializeComponent();
     this.DataContext = new NapisyModelWidoku();
}

除了在两个绑定中添加UpdateSourceTrigger ,还进行以下更改,

 public string Tekst
    {
        get
        {
            return model.Tekst;
        }
        set
        {
            model.Tekst = value;
            OnPropertyChanged("Tekst");
            OnPropertyChanged("Wyswietl");
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM