C# 如何在wpf中使用绑定修改列表的值
我想要实现的是将添加到空白数据网格的值保存到列表中。我有下面的c代码# 我的WPF代码C# 如何在wpf中使用绑定修改列表的值,c#,wpf,data-binding,binding,C#,Wpf,Data Binding,Binding,我想要实现的是将添加到空白数据网格的值保存到列表中。我有下面的c代码# 我的WPF代码 <DataGrid x:Name="selectedDatesGridView" Grid.Column="2" Width="140" CanUserReorderColumns="True" Style="{StaticResource DataGridStyle}" Margin="0,
<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>
当用户单击日历中的某个日期时,该日期将添加到数据网格中,但不在列表中
private void holidayCalendarDays_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
{
selectedDatesGridView.Items.Add((DateTime)holidayCalendarDays.SelectedDate);
selectedDatesGridView.Items.Refresh();
}
我怎样才能让它工作?谢谢你的帮助 很抱歉,这个答案必须是评论 正如@Ash在他的评论中所建议的,使用observablecollection,需要注意的一件重要事情是,实现INotifyPropertyChanged接口,在UI和业务逻辑之间交换数据(希望您使用的是MVVM)。还可以使用模式设置为twoway的绑定来设置ItemSource
希望这能有所帮助。很抱歉,这个答案必须是评论 正如@Ash在他的评论中所建议的,使用observablecollection,需要注意的一件重要事情是,实现INotifyPropertyChanged接口,在UI和业务逻辑之间交换数据(希望您使用的是MVVM)。还可以使用模式设置为twoway的绑定来设置ItemSource
希望这有帮助。您的代码将其添加到数据网格中,但不会更新列表 具有类型为List的公共属性,并将datagrid内容绑定到该属性。 然后将其添加到该列表中。它可能会起作用,但您确实希望使用ObservaleCollection,它会通知更改,因此一旦集合更改,您将自动看到更改(额外提示,它仅在添加或删除项时才执行此操作。如果您更改了其中的项,您需要自己刷新它:) 我会试着在一分钟内给你一些代码 这是来自一个使用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>
示例1:网格中包含项目的列表框:
在班级的某个地方:
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; }
公共InnerControlViewModel()
{
如果(IsInDesignMode)
{
mycl=newobserveCollection(){“您处于设计模式”,“随机生成下一项:”,“};
}
其他的
{
mycl=newobserveCollection(){“您处于运行时模式”,“随机生成下一项:”,“};
}
对于(int i=0;i<30;i++)
{
mycl.Add(“随机日期:+RandomHelper.RandomDate());
}
}
公共可观测集合MyCol{get;set;}
请注意,在构造函数中,我为设计器创建了一些伪数据,并且在实时中,我得到了一些随机数据
事实上,它是一个可观察的集合,在更新内容和添加内容时首当其冲,这也会刷新视图。您的代码将其添加到数据网格,但不会更新列表 具有类型为List的公共属性,并将datagrid内容绑定到该属性。 然后将其添加到该列表中。它可能会起作用,但您确实希望使用ObservaleCollection,它会通知更改,因此一旦集合更改,您将自动看到更改(额外提示,它仅在添加或删除项时才执行此操作。如果您更改了其中的项,您需要自己刷新它:) 我会试着在一分钟内给你一些代码 这是来自一个使用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>
示例1:网格中包含项目的列表框:
在班级的某个地方:
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; }
公共InnerControlViewModel()
{
如果(IsInDesignMode)
{
mycl=newobserveCollection(){“您处于设计模式”,“随机生成下一项:”,“};
}
其他的
{
mycl=newobserveCollection(){“您处于运行时模式”,“随机生成下一项:”,“};
}
对于(int i=0;i<30;i++)
{
mycl.Add(“随机日期:+RandomHelper.RandomDate());
}
}
公共可观测集合MyCol{get;set;}
请注意,在构造函数中,我为设计器创建了一些伪数据,并且在实时中,我得到了一些随机数据
事实上,它是一个可观察的集合,需要更新内容并添加到其中,这也将刷新视图。尝试使用
可观察集合
而不是列表
;与列表
不同,ObservableCollection
在项目被删除时发出通知added@ASh不,谢天谢地,我以为选定的日期会添加到HolidayCalendarDays
集合中,datagrid会显示该集合,而calendar和datagrid不会直接通信。我不得不重新阅读这个问题-当用户单击日历中的某个日期时,该日期被添加到datagrid中
-这部分是如何实现的?@ASh我已经添加了将所选日期添加到datagrid的代码一个简单的hack(但不是真正的wpf)将用以下代码替换holidayCalendarDays\u SelectedDateSchenged
内容:(selectedDatesGridView.ItemsSource as ObservableCollection)。添加(new HolidayCalendarDaysView(){DayToPlay=(DateTime)HolidayCalendarDates.SelectedDate})代码>。应使用observedcollection
而不是List
更新项目资源和网格;与列表
不同,ObservableCollection
在项目被删除时发出通知added@ASh不,谢天谢地,我以为选定的日期会添加到HolidayCalendarDays
集合中,datagrid会显示该集合,而calendar和datagrid不会直接通信。我不得不重新阅读这个问题-当用户单击日历中的某个日期时,该日期被添加到datagrid中
-这部分是如何实现的?@ASh我已经添加了将所选日期添加到datagrid的代码一个简单的hack(但不是真正的wpf)将用以下代码替换holidayCalendarDays\u SelectedDatesChanged
内容:(selectedDatesGridView.ItemsSource作为ObservableCollection)。A
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; }