我想要实现的是将添加到空白数据网格的值保存到List。我在c#
中有以下代码public class HolidayCalendarView
{
public List<HolidayCalendarDaysView> HolidayCalendarDays { get; set; }
}
HolidayCalendarDaysView类
public class HolidayCalendarDaysView
{
public int HolidayID { get; set; }
public DateTime DayToPlay { get; set; }
public HolidayBehaviourType HolidayBehaviourType { get; set; }
}
我的WPF代码
<DataGrid x:Name="selectedDatesGridView"
Grid.Column="2"
Width="140"
CanUserReorderColumns="True"
Style="{StaticResource DataGridStyle}"
Margin="0,0,5,0">
<DataGrid.Columns>
<DataGridTextColumn
Header="{x:Static resx:Resources.WordSelectedDates}"
Binding="{Binding DayToPlay, Mode=TwoWay, StringFormat={}{0:dd/MM/yyyy}}"
Width="1.5*" />
</DataGrid.Columns>
</DataGrid>
我在表单的构造函数中设置:
this.selectedDatesGridView.ItemsSource = holidayCalendarView.HolidayCalendarDays;
当用户点击日历中的日期时,日期会添加到数据网格中,但不会添加到列表中
private void holidayCalendarDays_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
{
selectedDatesGridView.Items.Add((DateTime)holidayCalendarDays.SelectedDate);
selectedDatesGridView.Items.Refresh();
}
我怎样才能让它发挥作用?谢谢你的帮助!
答案 0 :(得分:0)
很抱歉,这个答案必须是评论。
正如@Ash在他的评论中所建议的那样,使用observablecollection并注意一件重要的事情是,实现INotifyPropertyChanged接口,在UI和业务逻辑之间交换数据(希望你使用的是MVVM)。还使用绑定模式设置为twoway设置ItemSource。
希望这有帮助。
答案 1 :(得分:0)
您的代码会将其添加到数据网格中,但不会更新列表。
拥有List类型的公共属性,并将datagrid内容绑定到它。 然后添加到该列表。它可能工作,但你真的想使用ObservableCollection,它通知变化,所以一旦集合发生变化,你会自动看到变化(额外的提示,它只会在添加或删除项目时这样做)如果你更换了一个项目,你需要自己清理它:)
我会尝试在一分钟内给你一些代码
这是来自一个使用MVVM Light的项目,但想法是一样的。
在xaml中。请注意ItemSource
和绑定。
<Grid ToolTip="Notice that the scrollview works inside the Grid.">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock >Example 1: ListBox with items inside a Grid: </TextBlock>
<ListBox Grid.Row="1" ItemsSource="{Binding MyCol}"></ListBox>
</Grid>
课堂上的某个地方:
public InnerControlViewModel()
{
if (IsInDesignMode)
{
MyCol = new ObservableCollection<string>() {"You are in design mode", "Next items are randomly generated:", " "};
}
else
{
MyCol = new ObservableCollection<string>() { "You are in runtime mode", "Next items are randomly generated:", " " };
}
for (int i = 0; i < 30; i++)
{
MyCol.Add("Random Date: " + RandomHelper.RandomDate());
}
}
public ObservableCollection<string> MyCol { get; set; }
请注意,在构造函数中,我为设计器创建了一些虚假数据,实时我得到了一些随机数据。
事实上,它是一个可观察的集合,首当其冲的是更新事物,并且添加它,也会刷新视图。