0

ビューモデルからビューからメソッドを呼び出す方法はありますか? そうすることは良い習慣ですか?そうでない場合、ビューモデルからビュー内の要素をどのように非表示にしますか? ASP.Net やコード ビハインドなどでの作業に慣れているため、少し混乱しています。

xaml.cs

btnsave.visibility = visibility.hidden;
btnclose.visibility = visibility.hidden;
4

1 に答える 1

2

ビューで要素を非表示にする特定の例については、それらの要素が表示される条件を定義するいくつかのプロパティを ViewModel に設定することをお勧めします。次に、View 内のこれらの要素の Visibility プロパティを (おそらく BooleanToVisibilityConverter を使用して) ViewModel 内のそれらのプロパティにバインドします。

より一般的には、可能であればそれらの間の直接結合を最小限に抑えたいと考えていますが、「現実」が邪魔になる場合があります。ViewModel のコンストラクターに View を渡すケースがいくつかありました。View が実装し、ViewModel に渡されるインターフェイスであるその他のケース。したがって、オプションがあります。ただし、それを行う前に、そのルートに行かなければならないことを確認する必要があります。

例:

XAML:

<Window ...>
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="_B2VC" />
    </Window.Resources>
    <StackPanel>
        <Button Content="Save" Visibility="{Binding IsSaveButtonVisible}" />
        <Button Content="Close" Visibility="{Binding IsCloseButtonVisible}" />
    </StackPanel>
</Window>

ビューモデル:

public class ViewModel: INotifyPropertyChanged
{

    #region INPC Stuff
    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(String propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion

    private bool _IsSaveButtonVisible;
    public bool IsSaveButtonVisible
    {
        get { return _IsSaveButtonVisible; }
        set
        {
            if (_IsSaveButtonVisible != value)
            {
                _IsSaveButtonVisible = value;
                RaisePropertyChanged("IsSaveButtonVisible");
            }
        }
    }

    private bool _IsCloseButtonVisible;
    public bool IsCloseButtonVisible
    {
        get { return _IsCloseButtonVisible; }
        set
        {
            if (_IsCloseButtonVisible != value)
            {
                _IsCloseButtonVisible = value;
                RaisePropertyChanged("IsCloseButtonVisible");
            }
        }
    }
}

次に、ViewModel は必要に応じてこれらのプロパティを変更します (たとえば、Save は何かを変更した場合にのみ有効です。何かが変更されると、ViewModel のプロパティが更新され、ビューに伝達されます。 .

さらに例が必要な場合は、MVVM にアクセスして読むことをお勧めします。理解するのに少し時間がかかりますが、一度使用すると素晴らしいです.

于 2012-05-17T16:41:44.203 に答える