8

我的 XAML+C# Windows Store 应用程序中有复选框。我也有 bool 属性:WindowsStoreTestApp.SessionData.RememberUser它是公共的和静态的。

我希望复选框的属性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 框架之一,如果没有,INotifyPropertyChanged请在您的 ViewModel 中实现。

此外,通常在 WPF 中,我们不会设置单个控件的 DataContext,而是将 Window 或 User Control 的 DataContext 设置为 ViewModel ...

以下是通过 MVVM 框架之一具有更改通知的属性示例:

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

如您所见,一个简单的自动实现的属性不能用于 WPF 中的数据绑定......

我建议通过MSDN 上的数据绑定概述...

于 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 回答