WPF如何简单地从另一个类更新UI

时间:2017-07-07 06:33:29

标签: c# wpf xaml

我以前从另一个类更新UI时遇到问题;

这是我的情况。

首先,我将这个名为PersonalData的类

namespace WPF_APPLICATION

public class PersonalData
{       
    private string iDNumber;
    private string firstName;        

    public PersonalData()
    {            

    }       

    public string IDNumber
    {
        get
        {
            return iDNumber;
        }

        set
        {
            iDNumber = value;
        }
    }

    public string FirstName
    {
        get
        {
            return firstName;
        }

        set
        {
            firstName = value;
        }
    }
}

PersonalData由FirstPage.xaml.cs

创建
namespace WPF_APPLICATION

public partial class FirstPage 
{

    PersonalData person;

    public FirstPage()
    {
        InitializeComponent();   
        person = new PersonalData();
        person.IDNumber = "1659880";
    }

    private void firstBTN_Click(object sender, RoutedEventArgs e)
    {
        person.Firstname = "John";
    }

}

我想要的是我希望每次按下按钮或更改属性时,由FirstPage.xaml.cs创建的Object人员将更新UI到另一个页面(例如SeconePage.xaml,ThirdPage.xaml)。

我尝试过INotifyPropertyChanged但它不起作用,可能是我错过了WPF的一些概念。

这是我尝试过的SeconePage.xaml。

<Page x:Class="WPF_APPLICATION.SeconePage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  xmlns:local="clr-namespace:WPF_APPLICATION"
  xmlns:m="clr-namespace:WPF_APPLICATION"
  mc:Ignorable="d" 
  d:DesignHeight="240" d:DesignWidth="1080"
  Title="ScalePage">
<Page.Resources>        
    <m:PersonalData x:Key="myperson"/>       
</Page.Resources>

<Grid DataContext="{Binding Source={StaticResource myperson}}" Background="#eee">
    <TextBox x:Name="Value1" Text="{Binding IDNumber}"/>

    <TextBox x:Name="Value2" Text="{Binding FirstName}" Margin="0,40"/>
</Grid>

</Page>

实施INotifypropertyChanged的个人类

 namespace WPF_APPLICATION

public class PersonalData : INotifyPropertyChanged
{       
    private string iDNumber;
    private string firstName;

    public event PropertyChangedEventHandler PropertyChanged;        

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public PersonalData()
    {            

    }       

    public string IDNumber
    {
        get
        {
            return iDNumber;
        }

        set
        {
            iDNumber = value;
            OnPropertyChanged("IDNumber");
        }
    }

    public string FirstName
    {
        get
        {
            return firstName;
        }

        set
        {
            firstName = value;
            OnPropertyChanged("FirstName");
        }
    }
}

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我可以给你一个好的解决方案,你可以继续使用但是是解决问题的最佳方法。

1。打开一个新窗口

要打开一个新的 Window ,您需要一个 View 的实例,例如:

SeconePage seconePage = new SeconePage();

现在,您可以使用以下代码显示新的 Window

seconePage.Show();

2。执行步骤1 OnPropertyChanged()

中的代码

首先为当前窗口创建新变量:

public int currentWindow = 1;

然后为要显示的 Windows 创建一个方法:

 public void ShowNextWindow(int window)
    {
        switch (window)
        {
            case 2:
            SeconePage seconePage = new SeconePage();
            seconePage.Show();
            currentWindow += 1;
                break;
            case 3:
                ThirdPage thirdPage = new ThirdPage();
                thirdPage.Show();
                currentWindow += 1;
                break;
        }
    }

现在转到个人课程并将ShowNextWindow();添加到您的二传手。看起来应该是这样的:

public string IDNumber
    {
        get
        {
            return iDNumber;
        }

        set
        {
            iDNumber = value;
            ShowNextWindow(currentWindow);
            OnPropertyChanged("IDNumber");
        }
    }

现在,如果值发生变化,将显示下一个 Window

3。在Button.click()

上执行步骤1中的代码

只需在应该切换视图的按钮上执行ShowNextWindow(currentWindow);