列表框中一个项目的不同数据源
本文关键字:项目 数据源 一个 列表 | 更新日期: 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}"