1

ビューモデルからビューにブール値を渡し、値を変更するにはどうすればよいですか。たとえば、私のビューモデルでは、ブールを作成しました

public bool load
{
    get { return m_load; }
    set
    {
        m_load = value;
        OnPropertyChanged(this, o => o.load);
    }
}

私は自分のSelectedVmコードを持っています

public ViewModel SelectedVm
{
    get { return _selectedVm; }
    set
    {        
        _selectedVm = value;
        if (_selectedVm != null && load == true)
        {
            _selectedVm.Load();                   
        }
        Load = false;
        OnPropertyChanged(this, o => o.SelectedVm);               
    }
}

私のビューでSelectedVmは2回バインドされていますが、バインディングの1つだけでLoadを呼び出す必要があるため、boolを変更する必要がありますload

私の見解では、次のものがあれば

<ListView Grid.Row="1"  Name="Sample"  
          ItemsSource="{Binding Path=SampleViewModel}"  
          SelectedItem="{Binding SelectedVm, Mode=TwoWay}"     
          IsSynchronizedWithCurrentItem="True" Width="500">            
</ListView>

負荷を true または false に変更するにはどうすればよいですか?bool上記はすべて簡単なサンプルです。これはおそらく非常に単純だと思いますが、私はそれほど慣れておらず、WPFまだ学習中です。どんなアドバイスも素晴らしいでしょう

4

2 に答える 2

1

View で Load の値を取得し、純粋な MVVM パターンでそれを実行する場合は、View で bool 型の DependencyProperty を作成し、それを VM の Load プロパティにバインドします。

public partial class MainWindow : Window
{
    public static readonly DependencyProperty LoadProperty = DependencyProperty.Register("MyCustom", typeof(bool), typeof(MainWindow), new PropertyMetadata(new PropertyChangedCallback(LoadPropertyChangedCallback)));

    public bool Load
    {
        get
        {
            return (bool)this.GetValue(LoadProperty) ;
        }
        set
        {
            this.SetValue(LoadProperty, value);
        }
    }

    static void LoadPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    { 
        //Do your load stuff here
    }

    public MainWindow()
    {
        InitializeComponent();
        this.SetBinding(LoadProperty, new Binding("load"));
        DataContext = new ViewModel();
    }
}
public class ViewModel : INotifyPropertyChanged
{
    public ViewModel()
    {
        load = true;
    }
    bool m_load;
    public bool load
    {
        get { return m_load; }
        set
        {
            m_load = value;
            OnPropertyChanged("load");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }
}
于 2013-08-05T16:23:46.827 に答える
0

公開したコードによりLoad()、複数のバインドがあっても が 1 回呼び出されることが保証されます。

あなたの本当の質問を正しく理解していれば、実際には、それぞれが関数を 1 回だけSelectedVM呼び出していることを確認する方法を求めています。Load()右?その場合は、メイン クラスではなく
、クラスに bool プロパティを追加する必要があります。それだけです。ViewModel

その後:

public ViewModel SelectedVm
{
    get { return _selectedVm; }
    set
    {        
        _selectedVm = value;
        if (_selectedVm != null && _selectedVm.load == true)
        {
           _selectedVm.Load();                   
           _selectedVm.load = false;
        }
        OnPropertyChanged(this, o => o.SelectedVm);               
    }
}

XAML をそのまま保持できます。

于 2013-08-05T17:10:29.093 に答える