簡體   English   中英

類似於wpf的觸發器

[英]wpf-like trigger in code behind

我正在使用wpf在C#中編寫一個簡單的游戲。 在我的xaml.cs中,我創建了一個Game對象,可以完成所有工作。

我需要能夠在Game對象中的某個propertyChange上重新加載窗口。 我的xaml中已經有這個了:

<TextBlock x:Name="PhaseTB" Text="{Binding Phase, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center"/>

而Phase是Game對象的一部分:

public class Game : INotifyPropertyChanged
{
    private static Game _instance;
    private GamePhase phase;

    public static Game Instance
    {
        get
        {
            if (_instance == null)
                _instance = new Game(10, 10);
            return _instance;
        }
    }
 public GamePhase Phase
 {
     get { return phase; }
     set 
     { 
         phase = value;
         OnPropertyChanged("Phase");
     }
 }

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

一切正常,文本框根據“相位”值更新。

我的問題是:每當“相位”值更改時,如何調用方法? 文本更改就好了,但是我不知道如何調用代碼隱藏方法。

(對不起的問題,很抱歉。我已經繼承了代碼,還不太了解整個過程如何工作)

您需要訂閱事件PropertyChanged

`<yourDataContext>`.PropertyChanged += propertyChangedHandler;

其中<yourDataContext>是您的DataContext, propertyChangedHandler是事件處理程序。

注意 -您可以像這樣訪問數據上下文:

((Game)textBox1.DataContext).PropertyChanged += propertyChangedHandler;

要么

((Game)this.DataContext).PropertyChanged += propertyChangedHandler;

如果您的TextBox從Window / Page的主類繼承了DataContext。

該事件的存在正是出於您提到的目的。

至於該代碼的放置位置,我通常將其放置在構造函數中,因為它分配了事件處理程序:

public class MainWindow() {
    public MainWindow() {
        InitializeComponent();
        // Here go the event handlers....
    }
}

更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM