Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM在属性B更改时更新属性A_C#_Wpf_Mvvm - Fatal编程技术网

C# MVVM在属性B更改时更新属性A

C# MVVM在属性B更改时更新属性A,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个组合框和DataGrid设置,如下所示: <ComboBox Name="PayrollDatasesListBox" IsReadOnly="True" ItemsSource="{Binding PayrollDatabasesList}" SelectedValue="{Binding SelectedPayrollDatabase}" /> <DataGrid Name="RateTable"

我有一个组合框和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>

...
在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;
        }
    }
public ObservableCollection工资单数据库列表
{
收到
{
DelphiaConfigModel _config=(App.Current.Resources[“Locator”]作为ViewModelLocator);
返回新的observeCollection(_config.DatabaseInfo.PayrollDatabaseNames.Split(','))
.Select(c=>c.ToString().Trim())
.ToList());
}
}
公共字符串SelectedPayroll数据库{
收到
{
返回_selectedPayroll数据库;
}
设置
{
if(_SelectedPayrollDatabase!=值)
{
_SelectedPayrollDatabase=值;
NotifyPropertyChanged(m=>m.SelectedPayrollDatabase);
}
}
}
公共字符串\u选择Payroll数据库;
公共数据视图费率表数据视图
{
收到
{
数据集ds=新数据集(“临时数据集”);
//获取对DelphiaConfigInfo的引用
DelphiaConfigModel _配置=
(App.Current.Resources[“Locator”]作为ViewModelLocator);
使用(SQLClass _sql=newsqlclass(_config.DatabaseInfo))
{
使用(SqlConnection\u conn=\u sql.Connection)
{
//使用从组合框中选择的工资单数据库
//TODO:将InitialCatalog设置为所选数据库
SqlConnectionStringBuilder\u newConn=
新的SqlConnectionStringBuilder(_conn.ConnectionString){InitialCatalog=SelectedPayrollDatabase};
_conn.ConnectionString=\u newConn.ConnectionString;
//_conn.ChangeDatabase(“SageHRMS_BKC”);
SqlCommand _cmd=_conn.CreateCommand();
_cmd.CommandType=CommandType.storedProcess;
_cmd.CommandText=“aem.S_RateTable_SP”;
SqlDataAdapter _adapter=新的SqlDataAdapter(_cmd);
_适配器。填充(ds);
}
}
返回ds.Tables[0].DefaultView;
}
}

当SelectedPayroll数据库更改时,如何更新RateTableDataView

我可能遗漏了一些内容,但您可以从setter中为所选工资数据库进行更新

或者只需从INotifyPropertyChanged调用PropertyChanged事件并传递属性名

类似于

NotifyPropertyChanged(m => m.RateTableDataView);

我不太明白你的意思,你能举个例子吗?我会在SelectedPayroll数据库设置程序中调用什么来启动RateTableDataView获取程序?这就是为什么我说我可能遗漏了什么,您是否希望在UI中更新绑定?我已经编辑了答案,以显示您可以在“selected”属性中设置的通知,从而导致UI获取。老实说,您不应该将SQL查询之类的内容放入可绑定属性中,它会锁定UI。最好实现一个异步命令,该命令将使用
DataView