簡體   English   中英

在應用程序運行后運行命令

[英]Command run after application run

我注意到它不僅發生在一個項目中,而且發生在多個項目中,因此我將提供一個簡單的示例。 我有這樣的xaml:

<Page
x:Class="TestApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<Grid>
    <Button Content="Button" Command="{Binding PressedButton}" HorizontalAlignment="Left" Margin="0,-10,0,-9" VerticalAlignment="Top" Height="659" Width="400"/>
</Grid>
</Page>

我的類綁定數據:

public abstract class ObservableObject : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            this.PropertyChanged(this, e);
        }
    }
}

public class Command : ICommand
{
    private Action<object> action;

    public Command(Action<object> action)
    {
        this.action = action;
    }

    public bool CanExecute(object parameter)
    {
        if (action != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        if (action != null)
        {
            action((string)parameter);
        }
    }
}

public class TestViewModel : ObservableObject
{
    public ICommand PressedButton
    {
        get
        {
            return new Command((param) => { });
        }
    }
}

和主頁:

    public MainPage()
    {
        this.InitializeComponent();

        this.NavigationCacheMode = NavigationCacheMode.Required;
        DataContext = new TestViewModel();
    }

這很奇怪,但PressedButton僅在應用程序啟動時運行(不是很奇怪,它在啟動時運行嗎?)。 之后,即使單擊按鈕后也不會觸發任何操作。 我不知道怎么了。

我認為您可能會因每次調用“ getter”而返回一個新命令而導致綁定問題。 嘗試在構造函數中設置一次命令(例如)。

public MainPage()
{
    PressedAdd = new Command(param => SaveNote());
}

public ICommand PressedAdd { get; private set; }

SaveNote()方法中,您可以測試值並保存(或不保存)它們:

private void SaveNote()
{
    if (NoteTitle == null || NoteContent == null)
        return;

    // Do something with NoteTitle and NoteContent
}

暫無
暫無

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

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