c# - WPF 将 bool 值传递给 View 并更改它

标签 c# .net wpf data-binding mvvm

我如何将 View 模型中的 bool 值传递给 View 并更改值。
例如在我的 View 模型中,我创建了一个 bool

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被绑定(bind)了两次,但我只想在其中一个绑定(bind)上调用 Load,因此需要更改 bool load
所以在我看来,如果我有以下
<ListView Grid.Row="1"  Name="Sample"  
          ItemsSource="{Binding Path=SampleViewModel}"  
          SelectedItem="{Binding SelectedVm, Mode=TwoWay}"     
          IsSynchronizedWithCurrentItem="True" Width="500">            
</ListView>

我如何更改 bool加载为真或假
以上所有只是快速示例,我认为这可能很简单,但是我不习惯 WPF我还在学习。任何建议都会很棒

最佳答案

好的,如果你想在 View 中获取 Load 的值并且你想在纯 MVVM 模式中执行它,那么在 View 中创建 bool 类型的 DependencyProperty 并将其绑定(bind)到 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));
    }
}

关于c# - WPF 将 bool 值传递给 View 并更改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062063/

相关文章:

c# - 从 XAML 中的 *.resx 文件获取值

c# - linq 从子集合中选择项目

wpf - 如何使用 Dispatcher.Invoke 返回值?

c# - 在wpf中打开窗口内的excel文件

c# - using语句的用法

c# - 从头开始为 Windows 8.1 创建 MvvmCross Store 应用程序的过程?

c# - 如何获取app.config中的服务基地址?

c# - 获取通过 Ajax 传递的 Controller 中的 Json.Stringify 值

c# - 如何绘制选定的文本

c# - 获取 WrapPanel 中的行数?