Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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# DataContext未更新(新手问题)_C#_Wpf - Fatal编程技术网

C# DataContext未更新(新手问题)

C# DataContext未更新(新手问题),c#,wpf,C#,Wpf,我有一个名为“SelectedDay”的对象,我将其实例化如下: Day SelectedDay = new Day(DateTime.Parse("01/01/0001")); 在已加载的窗口中,我将listBox Datacontext设置为: lb_summary.DataContext = SelectedDay; 稍后在我的应用程序中,当用户在另一个列表框中单击某一天时,我会将新的SelectedDay传递给它: public void RefreshSummary(Day _se

我有一个名为“SelectedDay”的对象,我将其实例化如下:

Day SelectedDay = new Day(DateTime.Parse("01/01/0001"));
在已加载的窗口中,我将listBox Datacontext设置为:

lb_summary.DataContext = SelectedDay;
稍后在我的应用程序中,当用户在另一个列表框中单击某一天时,我会将新的SelectedDay传递给它:

public void RefreshSummary(Day _selectedDay)
{
    SelectedDay = _selectedDay;
}
我希望lb_summary.DataContext变为_selectedDay,但什么也没有发生,selectedDay与_selectedDay相同,但lb_summary.DataContext为空

我错过了什么

编辑

这是对象结构(它们实现INotifyPropertyChanged,编辑以保留breif):

公共课日:INotifyPropertyChanged
{       
公共字符串标题{get;set;}
public DateTime DayDate{get;set;}
公共可观测的收集Gigs{get;set;}///在一个日间单元中预订的Gigs
}
公共类Gig:INotifyPropertyChanged
{
//gig的性质
}

通常不绑定到值。更改属性并实现
INotifyPropertyChanged

通常不绑定到值。您可以更改属性并实现
INotifyPropertyChanged

是否要使用
绑定
?使用
UpdateSourceTrigger=PropertyChanged
并通过
INotifyPropertyChanged
接口通知属性更改

您是否可以使用
绑定
?使用
UpdateSourceTrigger=PropertyChanged
并通过
INotifyPropertyChanged
接口通知属性更改

看一看。在这里,您将创建一个视图模型类型,其中包含
SelectedDay
属性,并在视图模型上实现
INotifyPropertyChanged
。在
SelectedDay
属性的setter中,您将调用
PropertyChanged
事件。然后,将视图的DataContext设置为视图模型的实例。

请查看。在这里,您将创建一个视图模型类型,其中包含
SelectedDay
属性,并在视图模型上实现
INotifyPropertyChanged
。在
SelectedDay
属性的setter中,您将调用
PropertyChanged
事件。然后,将视图的DATACON文本设置为视图模型的一个实例。

< P>如果SelectedDay不是视图模型的一部分,可能是控件本身的属性(例如,数据戳可能有一个SayDayDay1属性),请考虑在控件上创建SaleDayTyAsdiCyNyType,因此,它将处理对UI的通知:

public static readonly DependencyProperty SelectedDayProperty =
        DependencyProperty.Register("SelectedDay", typeof(Day), typeof(type_of_yourcontrol for instance DatePicker?));

public Day SelectedDay
{
     get { return (Day)GetValue(SelectedDayProperty); }
     set { SetValue(SelectedDayProperty, value); }
}

如果SelectedDay不是视图模型的一部分,可能是控件本身的一个属性(例如,数据包可能有一个SealDayDy属性),请考虑在您的控件上选择SaleDayTyAsdiCyNyType,这样它将处理对UI的通知:

public static readonly DependencyProperty SelectedDayProperty =
        DependencyProperty.Register("SelectedDay", typeof(Day), typeof(type_of_yourcontrol for instance DatePicker?));

public Day SelectedDay
{
     get { return (Day)GetValue(SelectedDayProperty); }
     set { SetValue(SelectedDayProperty, value); }
}

现在,忘掉所有关于MVVM和DependencyProperties之类的话题吧。。。我们需要一些基本的战略

你的作业不起作用的原因很简单:你的datacontext没有改变,而是选择了改变的日期。您的Day类是一个引用类型,因此现在指定的DataContext指向您的第一个SelectedDay对象


但是,稍后您决定将SelectedDay的指定更改为另一个Day对象。这是可行的,但是它不会改变DataContext对象的引用。

现在,忘记所有关于MVVM和DependencyProperties等的讨论吧。。。我们需要一些基本的战略

你的作业不起作用的原因很简单:你的datacontext没有改变,而是选择了改变的日期。您的Day类是一个引用类型,因此现在指定的DataContext指向您的第一个SelectedDay对象


但是,稍后您决定将SelectedDay的指定更改为另一个Day对象。这是可行的,但是它不会更改DataContext对象的引用。

正如UrbanEsc所说,您的DataContext不会更改。因此,设置SelectedDay属性不会更改任何内容或引发任何属性更改。
要使其与您提供的代码一起工作,您应该编写以下代码:

public void RefreshSummary(Day _selectedDay)
{
    lb_summary.DataContext = _selectedDay;
}

但正如其他人指出的,最好将DataContext设置为对象,并将listbox绑定到该对象的属性。

正如UrbanEsc所说,DataContext不会更改。因此,设置SelectedDay属性不会更改任何内容或引发任何属性更改。
要使其与您提供的代码一起工作,您应该编写以下代码:

public void RefreshSummary(Day _selectedDay)
{
    lb_summary.DataContext = _selectedDay;
}

但正如其他人所指出的,最好将DataContext设置为对象,并将listbox绑定到该对象的属性。

Ahh好的,我是否需要按照Daniel的建议更改SelectedDay的属性?我已尝试将DataContext重新分配给_selectedDay,但我收到一个线程错误。您是否理解为什么您的第一个代码没有执行您希望它执行的操作?此外,还有各种方法可以实现您想要的,Wpf方法肯定会涉及某种类型的数据绑定,但由于您似乎是Wpf的新手,我建议您先查阅一些关于Wpf的初学者教程。此外,如果尝试从非UI线程更新UI,则会出现异常。在调度程序上调用它。再说一次,这可能是你必须仔细阅读的东西!祝你好运是的,我理解,参考类型,非常感谢UrbanEsc的指针。啊,好的,我需要按照Daniel的建议更改SelectedDay的属性吗?我已尝试将DataContext重新分配给_selectedDay,但我收到一个线程错误。您是否理解为什么您的第一个代码没有执行您希望它执行的操作?此外,还有各种方法可以实现您想要的,Wpf方法肯定会涉及某种类型的数据绑定,但由于您似乎是Wpf的新手,我建议您先查阅一些关于Wpf的初学者教程。此外,如果您尝试从以下线程更新UI,则为“是”