0

グリッドのペアの可視性フラグをバインドしようとしていますが、それらは私の試みを無視しているようです。どんな助けでも大歓迎です。ありがとう!

これは私の画面のxamlにあります:

<Grid Name="grdNotifLogo" Style="{StaticResource insightLogoNotify}" Visibility="{Binding Path=_notifVisibility, Mode=OneWay}" MouseDown="grdNotifLogo_MouseDown"/>
<Grid Name="grdMainLogo" Style="{StaticResource insightLogo}" Visibility="{Binding Path=_logoVisibility, Mode=OneWay}"/>

screens の xaml.cs ファイルは、次のような window 基本クラスを継承します。

protected Visibility _logoVisibility = _ Visibility.Visible;
protected Visibility _notifVisibility = _ Visibility.Collapsed;
public bool NotificationIconEnabled
{
    get { return _notifVisibility == Visibility.Visible; }
    set
    {
        if (value)
        {
            _logoVisibility = Visibility.Collapsed;
            _notifVisibility = Visibility.Visible;
        }
        else
        {
            _logoVisibility = Visibility.Visible;
            _notifVisibility = Visibility.Collapsed;
        }
    }
}

データ コンテキストは、関心のあるグリッドを保持するグリッドにもセットアップされます。

        ToolBar.DataContext = this;
4

1 に答える 1

1

ええ、ライアン、アダム、ティグランの間で答えがあります。コードでは、完全なソリューションは以下のサンプルのようになります。"Binding" キーワードを使用すると、コントロールのデータ コンテキストからプロパティにアクセスしようとすることに注意してください。そのため、コントロールの「DataContext」プロパティを、それらのプロパティを持つクラスに設定する必要があります。Ryan が指摘しているように、プロパティもパブリックである必要があります。そうしないと、それらにバインドできません。最後に、Adam が指摘しているように、INotifyPropertyChanged インターフェイスを使用して、ビューモデル オブジェクトのプロパティの変更をコントロールに伝達する必要があります。

したがって、XAML は、新しいパブリック プロパティ名を指すように調整されます。

<Grid Name="grdNotifLogo" Style="{StaticResource insightLogoNotify}" Visibility="{Binding NotificationVisibility}" MouseDown="grdNotifLogo_MouseDown"/>
<Grid Name="grdMainLogo" Style="{StaticResource insightLogo}" Visibility="{Binding LogoVisibility}"/>

コントロールのデータ コンテキストを設定します。

class MyControl : UserControl
{
    public MyControl()
    {
        InitializeComponent();
        this.DataContext = new MyViewModel();
    }
}

データ コンテキストとして設定する新しいビューモデル クラスを作成します。

class MyViewModel : INotifyPropertyChanged
{
    private Visibility _logoVisibility = Visibility.Visible;
    private Visibility _notifVisibility = Visibility.Collapsed;

    public Visibility LogoVisibility
    {
        get { return _logoVisibility; }
    }

    public Visibility NotificationVisibility
    {
        get { return _notifVisibility; }
    }

    public bool NotificationIconEnabled
    {
        get { return _notifVisibility == Visibility.Visible; }
        set
        {
            if (value)
            {
                _logoVisibility = Visibility.Collapsed;
                _notifVisibility = Visibility.Visible;
            }
            else
            {
                _logoVisibility = Visibility.Visible;
                _notifVisibility = Visibility.Collapsed;
            }
            OnPropertyChanged("LogoVisibility");
            OnPropertyChanged("NotificationVisibility");
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

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

    #endregion // INotifyPropertyChanged Members
}
于 2012-06-26T23:48:05.530 に答える