8

XAML+C# Windows ストア アプリケーションにチェック ボックスがあります。WindowsStoreTestApp.SessionData.RememberUserまた、パブリックで静的なboolプロパティがあります。

チェック ボックスのプロパティIsCheckedをこの bool プロパティと一致させる (またはバインドまたはマップする) 必要があります。

私はこれを試しました:XAML

<CheckBox x:Name="chbRemember1"  IsChecked="{Binding Mode=TwoWay}"/>

C#

chbRemember1.DataContext = SessionData.RememberUser;

プロパティのコード:

namespace WindowsStoreTestApp
{
    public class SessionData
    {
        public static bool RememberUser { get; set; }
    }
}

しかし、うまくいかないようです。手伝って頂けますか?

4

4 に答える 4

5
<CheckBox x:Name="chbRemember1"  IsChecked="{Binding Path=RememberUser, Mode=TwoWay}"/>

 

public class SessionData : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string info)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(info));
    }


    bool _rememberUser;
    public bool RememberUser
    {
        get
        {
            return _rememberUser;
        }
        set
        {
            _rememberUser = value;
            NotifyPropertyChanged("RememberUser");
        }
    }
}
于 2012-12-05T23:05:47.897 に答える
4

チェックボックスがプロパティへの変更を「認識する」ようにするには、何らかの形式の変更通知を実装する必要があります。最善の策は、多くの MVVM フレームワークの 1 つを使用することです。そうでない場合は、INotifyPropertyChangedViewModel に実装します。

また、通常、WPF では、個々のコントロールの DataContext を設定するのではなく、ウィンドウまたはユーザー コントロールの DataContext を ViewModel に設定します...

MVVM フレームワークの 1 つを介した変更通知を含むプロパティの例を次に示します。

private bool createTrigger;
public bool CreateTrigger
{
    get { return createTrigger; }
    set { createTrigger = value; NotifyPropertyChanged(m => m.CreateTrigger); }
}

ご覧のとおり、自動実装された単純なプロパティは、WPF のデータ バインディングには使用できません...

MSDN のData Binding Overviewを参照することをお勧めします...

于 2012-12-05T23:02:23.427 に答える
3

このようにしてみてください。プロパティは静的ではありませんが、バッキング フィールドは次のとおりです。

public class SessionData : INotifyPropertyChanged
{
    private static bool _rememberUser;

    public event PropertyChangedEventHandler PropertyChanged;

    public bool RememberUser
    {
        get { return _rememberUser; }
        set
        {
            _rememberUser = value;
            OnPropertyChanged();
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
this.DataContext = new SessionData();
<CheckBox x:Name="chbRemember1"  IsChecked="{Binding RememberUser, Mode=TwoWay}"/>
于 2012-12-05T23:07:50.247 に答える
3

静的プロパティは PropertyChanged イベントを発生させることができないため、静的プロパティにバインドすることはできません。もちろん、INotifyPropertyChanged が必要です。しかし、それは静的プロパティには関係ありません。静的プロパティにバインドすることはできません。(WPFとSilverlightでできます)

于 2012-12-05T23:08:23.300 に答える