嵌套WPF datatemplate中的绑定
本文关键字:绑定 datatemplate WPF 嵌套 | 更新日期: 2023-09-27 17:51:21
我有一个WPF控件Foo。使用DevExpress LoadingDecorator的网格结构是这样的:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="60" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<dx:LoadingDecorator Name="Decorator" IsSplashScreenShown="{Binding Path=ShowLoader}" SplashScreenLocation="CenterWindow">
<dx:LoadingDecorator.SplashScreenTemplate>
<DataTemplate>
<dx:WaitIndicator DeferedVisibility="True">
<dx:WaitIndicator.ContentTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="Operation:" FontSize="15"/>
<TextBlock Text="{Binding Path=CurrLoadStat}"/>
</StackPanel>
</DataTemplate>
</dx:WaitIndicator.ContentTemplate>
</dx:WaitIndicator>
</DataTemplate>
</dx:LoadingDecorator.SplashScreenTemplate>
</dx:LoadingDecorator>
</StackPanel>
...
</Grid>
基本ViewModel类实现了INotifyPropertyChanged接口和ViewModel类(FooViewModel)用作数据文本的控制与上面描述的网格继承自它。我已经实现了属性来改变文本属性在第二个TextBlock元素:
private string currLoadStat = "Preparing data...";
public string CurrtLoadStat
{
get
{
return currLoadStat;
}
set
{
currLoadStat = value;
OnPropertyChanged("CurrLoadStat");
}
}
我的问题是绑定指令不起作用,我只看到在第一个TextBlock中定义的文本。你能给我一些解决这个问题的方法吗?
您的属性在名称中间有一个"t",但您的绑定路径(XAML)和您传递给OnPropertyChanged
的魔法字符串没有。当你触发PropertyChanged
事件方法时,你传递的字符串必须完全匹配你的视图模型的属性名。
如果你正在使用c# 5或6,那么切换到使用这里列出的方法之一,你将消除传递魔术字符串的需要。