列表框中一个项目的不同数据源

本文关键字:项目 数据源 一个 列表 | 更新日期: 2023-09-27 18:07:07

我有一个ListBox绑定到一个数据上下文工作良好。但在一些项目上,我想显示一个文本块与数据从另一个上下文。但是我不能让它工作。我有它在cs类的字符串上工作,但是当我把它改成一个实现INotifyPropertyChanged的类时,我没有得到文本显示在所有…

这是一个简化的ItemTemplate的xaml:

    <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的新手)?

列表框中一个项目的不同数据源

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

  • 在ViewModel中定义免责条目作为属性。
  • 设置PhoneApplicationPage的名称
  • 在你的标记扩展中使用PhoneApplicationPage Name将文本块绑定到ViewModel属性

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

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

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