ListBox中一个项目上的不同数据源

时间:2014-06-07 15:50:21

标签: c# xaml windows-phone-8

我有一个ListBox绑定到一个工作正常的数据上下文。但是在某些项目上,我想要显示包含来自其他上下文的数据的文本块。但是我无法让它发挥作用。我有它在cs类中的字符串上工作,但是当我将它更改为实现INotifyPropertyChanged的类时,我根本没有显示文本...

这是我的xaml的简化ItemTemplate:

    <DataTemplate x:Key="ArrivalFlightItemTemplate">
            <TextBlock Text="{Binding ArrivalFlightItem.Operator}" />
            <StackPanel Visibility="{Binding Converter={StaticResource FlightDisclaimerConverter}}">
                <TextBlock Text="{Binding DisclaimerText}" Style="{StaticResource NormalText}" Foreground="{StaticResource DarkForegroundColor}">
                    <TextBlock.DataContext>
                        <local:FlightDisclaimerItem/>
                    </TextBlock.DataContext>
                </TextBlock>
            </StackPanel>
    </DataTemplate>

在cs构造函数中我有:

        var flightsVM = SingletonClass.FlightsViewModel;
        this.DataContext = listFlightsVM;
        disclaimerItem = new FlightDisclaimerItem();
        disclaimerItem.DisclaimerText = Strings.FlightInfoDisclaimerShort;

任何人都可以帮我解决这个问题(我是Windows Phone新手)吗?

2 个答案:

答案 0 :(得分:0)

为什么要在代码隐藏中绑定一些数据?你应该在XAML中完成所有工作。

  • 将disclaimerItem定义为ViewModel中的属性。
  • 设置PhoneApplicationPage的名称
  • 使用标记扩展中的PhoneApplicationPage名称将相关文本块绑定到ViewModel属性

<TextBlock DataContext="{Binding DataContext.DisclaimerItemProperty, ElementName=phoneApplicationPageName}" />

答案 1 :(得分:0)

我搞定了!我无法使用DataTemplate中的另一个DataContext工作。但是通过绑定到页面中的另一个对象(免责声明面板),它可以按预期工作。

Text="{Binding ElementName=DisclaimerPanel, Path=DataContext.DisclaimerText}"