我有一个预订,里面有一个TourGuides列表,我正在尝试同时创建一个预订和TourGuides列表,预订绑定正在运行,但TourGuideOnTour总是回来为null。
继承我的模特:
public class Booking : INotifyPropertyChanged {
public IList<TourGuide> TourGuidesOnTour {
get {
if (_tourGuidesOnTour == null)
return new List<TourGuide>();
return _tourGuidesOnTour;
}
set {
_tourGuidesOnTour = value;
OnPropertyChanged("TourGuidesOnTour");
}
}
}
public class TourGuide : INotifyPropertyChanged {
string _tourGuideFirstName;
public string TourGuideFirstName {
get { return _tourGuideFirstName; }
set {
_tourGuideFirstName = value;
OnPropertyChanged("TourGuideFirstName");
}
}
}
这是我的约束力:
<Grid Name="myGrid" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<StackPanel Margin="10">
<StackPanel.Resources>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Margin" Value="0,10,0,0"/>
</Style>
</StackPanel.Resources>
<GroupBox Header="Tour Information">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Tour" Width="130"/>
<TextBox Grid.Row="1" Grid.Column="1" Width="185">
<TextBox.Text>
<Binding Path="TourName" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
</GroupBox>
<GroupBox Header="Tour Guide Information">
<DataGrid ItemsSource="{Binding Path=TourGuidesOnTour, Mode=TwoWay}">
</DataGrid>
</GroupBox>
<Button Name="Save" Content="Save" Click="Save_Click" Width="170" Height="40" />
</StackPanel>
</Grid>
我设置了我的Datacontext:
public Booking ReturnValue;// = null;
public CreateBooking() {
InitializeComponent();
ReturnValue = new Booking();
myGrid.DataContext = ReturnValue;
}
且ReturnValue.TourGuidesOnTour
等于null
:(
谁能告诉我为什么?
答案 0 :(得分:1)
我在您发布的代码中没有看到您正在初始化TourGuidesOnTour的任何地方,即
ReturnValue.TourGuidesOnTour = new List<TourGuide>();
如果不这样做,你的getter将始终返回一个新的TourGuide列表,但永远不会初始化内部变量。
所以,您可以初始化TourGuidesOnTour,也可以将getter修改为以下内容;
get
{
if (_tourGuidesOnTour == null)
_tourGuidesOnTour= new List<TourGuide>();
return _tourGuidesOnTour;
}