WPF绑定多对一关系返回空结果

时间:2012-12-16 19:37:07

标签: wpf binding

我有一个预订,里面有一个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 :(

谁能告诉我为什么?

1 个答案:

答案 0 :(得分:1)

我在您发布的代码中没有看到您正在初始化TourGuidesOnTour的任何地方,即

ReturnValue.TourGuidesOnTour = new List<TourGuide>();

如果不这样做,你的getter将始终返回一个新的TourGuide列表,但永远不会初始化内部变量。

所以,您可以初始化TourGuidesOnTour,也可以将getter修改为以下内容;

get
{
  if (_tourGuidesOnTour == null)
     _tourGuidesOnTour= new List<TourGuide>();

   return _tourGuidesOnTour;
}