简体   繁体   English

当属性B更改时,MVVM更新属性A

[英]MVVM Update Property A when Property B changes

I have a ComboBox and DataGrid setup like so: 我有一个ComboBox和DataGrid设置,如下所示:

<ComboBox Name="PayrollDatasesListBox"
          IsReadOnly="True"
          ItemsSource="{Binding PayrollDatabasesList}"
          SelectedValue="{Binding SelectedPayrollDatabase}" />

    <DataGrid Name="RateTable"
              ItemsSource="{Binding RateTableDataView}"
              Margin="20"
              AutoGenerateColumns="False"
              Width="775"> ...
    </DataGrid>

In the ViewModel I have the following properties: 在ViewModel中,我具有以下属性:

    public ObservableCollection<String> PayrollDatabasesList
    {
        get
        {
            DelphiaConfigModel _config = (App.Current.Resources["Locator"] as ViewModelLocator).SystemSetupViewModel.DelphiaConfigInfo;
            return new ObservableCollection<String>(_config.DatabaseInfo.PayrollDatabaseNames.Split(',')
                .Select(c => c.ToString().Trim())
                .ToList());
        }
    }

    public String SelectedPayrollDatabase { 
        get
        {
            return _SelectedPayrollDatabase;
        }
        set
        {
            if (_SelectedPayrollDatabase != value)
            {
                _SelectedPayrollDatabase = value;
                NotifyPropertyChanged(m => m.SelectedPayrollDatabase);
            }
        }
    }
    public String _SelectedPayrollDatabase;

    public DataView RateTableDataView
    {
        get
        {
            DataSet ds = new DataSet("TempDataSet");

            // Get reference to DelphiaConfigInfo
            DelphiaConfigModel _config = 
                (App.Current.Resources["Locator"] as ViewModelLocator).SystemSetupViewModel.DelphiaConfigInfo;

            using (SQLClass _sql = new SQLClass(_config.DatabaseInfo))
            {
                using (SqlConnection _conn = _sql.Connection)
                {
                    // use the chosen Payroll Database from ComboBox
                    //TODO: set InitialCatalog to selected database
                    SqlConnectionStringBuilder _newConn =
                        new SqlConnectionStringBuilder(_conn.ConnectionString) { InitialCatalog = SelectedPayrollDatabase };
                    _conn.ConnectionString = _newConn.ConnectionString;

                    //_conn.ChangeDatabase("SageHRMS_BKC");

                    SqlCommand _cmd = _conn.CreateCommand();
                    _cmd.CommandType = CommandType.StoredProcedure;
                    _cmd.CommandText = "aem.S_RateTable_SP";

                    SqlDataAdapter _adapter = new SqlDataAdapter(_cmd);

                    _adapter.Fill(ds);
                }
            }

            return ds.Tables[0].DefaultView;
        }
    }

How can I update RateTableDataView when SelectedPayrollDatabase changes? SelectedPayrollDatabase更改时如何更新RateTableDataView?

I might be missing something but you can just update from the setter for your selected payroll database. 我可能会遗漏一些东西,但是您只能从设置器中为所选的薪资数据库进行更新。

Or just call the PropertyChanged event from INotifyPropertyChanged passing your property name. 或者只是通过传递您的属性名称从INotifyPropertyChanged调用PropertyChanged事件。

Something like... 就像是...

NotifyPropertyChanged(m => m.RateTableDataView);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM