WPF Datagrid未使用MethodParameters正确刷新

WPF Datagrid未使用MethodParameters正确刷新,wpf,c#-4.0,wpfdatagrid,Wpf,C# 4.0,Wpfdatagrid,我在让ObjectDataProvider使用方法参数时遇到了很多麻烦。现在,通过下面的代码,我可以在XAML visual studio designer中查看数据,但是一旦我尝试刷新ObjectDataProvider,我的数据就会消失。我已经用五个参数设置了一个对象数据提供程序,虽然这些参数没有传递到dataset查询,但我只想看看是否可以首先传递这些参数。我运行底部的filter方法来刷新OBJDataProvider,我的datagrid变为空白 我的两个ObjectDataProvi

我在让ObjectDataProvider使用方法参数时遇到了很多麻烦。现在,通过下面的代码,我可以在XAML visual studio designer中查看数据,但是一旦我尝试刷新ObjectDataProvider,我的数据就会消失。我已经用五个参数设置了一个对象数据提供程序,虽然这些参数没有传递到dataset查询,但我只想看看是否可以首先传递这些参数。我运行底部的filter方法来刷新OBJDataProvider,我的datagrid变为空白

我的两个ObjectDataProvider

<ObjectDataProvider x:Key="LogDataProvider" ObjectType="{x:Type local:LogDataProvider}"/>

<ObjectDataProvider x:Key="siteListContains" MethodName="GetLog2" ObjectType="{x:Type local:LogDataProvider}">
   <ObjectDataProvider.MethodParameters>
      <s:String>Red</s:String>
      <s:DateTime>12:14:24</s:DateTime>
      <s:DateTime>2008-01-01</s:DateTime>
      <s:DateTime>12:12:12</s:DateTime>
      <s:DateTime>2008-01-01</s:DateTime>
   </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
在这里,我遇到了一些问题,当我将sitestr传递给MethodParameter[0]时,它会立即跳转到LogDataProvider的GetLog2方法,而不接收其余的参数。。。然后我的数据网格变为空白:-(


每次更新任何参数时,它都应调用Refresh。如果要设置多个参数,则应使用使其等待完成:

private void filter_btn_Click(object sender, RoutedEventArgs e)
{
    ObjectDataProvider sitelist_dataobj = this.FindResource("siteListContains") as ObjectDataProvider;
    using (sitelist_dataobj.DeferRefresh())
    {
        sitelist_dataobj.MethodParameters[0] = sitestr.Text.ToString();
        sitelist_dataobj.MethodParameters[1] = from_timePicker.SelectedTime;
        sitelist_dataobj.MethodParameters[2] = from_datepicker.SelectedDate;
        sitelist_dataobj.MethodParameters[3] = to_timePicker.SelectedTime;
        sitelist_dataobj.MethodParameters[4] = to_datepicker.SelectedDate;
    }
}

谢谢,这是一个很好的帮助。尽管我一调用filter_btn_Click方法,我的datagrid就会变为空白。@wonea:如果在调用GetLog2期间查看调试器中的dataset.eventlog,它是否有数据?是的,我可以在调试模式下查看sitelist_DataObjective中的数据,并且可以在;sitelist_DataObjectInstance.dataset.event中查看数据日志被稍微欺骗了一下,我意识到是DATETIME方法参数导致了问题。所以我做了更多的工作,只是将它们作为字符串传递。现在工作得非常好。:-)虽然它以无声的方式失败很烦人,但我希望出现异常。
public class LogDataProvider
{
   private eventlogTableAdapter adapter;
   DataSet1 dataset;

   public LogDataProvider()
   {
      dataset = new DataSet1();
      adapter = new eventlogTableAdapter();
   }

   public DataView GetLog2(string sitestr, DateTime fromtimestr, DateTime fromdatestr, DateTime totimestr, DateTime todatestr)
   {
      adapter.Fill(dataset.eventlog);
      return dataset.eventlog.DefaultView;
   }
}
private void filter_btn_Click(object sender, RoutedEventArgs e)
{
   ObjectDataProvider sitelist_dataobj = this.FindResource("siteListContains") as ObjectDataProvider;
   sitelist_dataobj.MethodParameters[0] = sitestr.Text.ToString();
   sitelist_dataobj.MethodParameters[1] = from_timePicker.SelectedTime;
   sitelist_dataobj.MethodParameters[2] = from_datepicker.SelectedDate;
   sitelist_dataobj.MethodParameters[3] = to_timePicker.SelectedTime;
   sitelist_dataobj.MethodParameters[4] = to_datepicker.SelectedDate;

   sitelist_dataobj.Refresh();
}
private void filter_btn_Click(object sender, RoutedEventArgs e)
{
    ObjectDataProvider sitelist_dataobj = this.FindResource("siteListContains") as ObjectDataProvider;
    using (sitelist_dataobj.DeferRefresh())
    {
        sitelist_dataobj.MethodParameters[0] = sitestr.Text.ToString();
        sitelist_dataobj.MethodParameters[1] = from_timePicker.SelectedTime;
        sitelist_dataobj.MethodParameters[2] = from_datepicker.SelectedDate;
        sitelist_dataobj.MethodParameters[3] = to_timePicker.SelectedTime;
        sitelist_dataobj.MethodParameters[4] = to_datepicker.SelectedDate;
    }
}