嵌套WPF DataTemplates

时间:2016-06-28 00:30:24

标签: c# wpf xaml mvvm data-binding

我有一些名为Foo的WPF控件。使用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>

Base ViewModel类实现了INotifyPropertyChanged接口和ViewModel类(FooViewModel),用作DataContext,用于控制,上面描述的Grid继承自它。我已经实现了属性来更改第二个TextBlock元素中的文本属性:

        private string currLoadStat = "Preparing data...";

        public string CurrtLoadStat
        {
            get
            {
                return currLoadStat;
            }
            set
            {
                currLoadStat = value;
                OnPropertyChanged("CurrLoadStat");
            }
        }

我的问题是绑定指令不起作用,我只看到第一个TextBlock中定义的文本。 你能为我提供解决这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:2)

您的属性在名称中间有一个“t”,但您传递给OnPropertyChanged的绑定路径(XAML)和魔术字符串没有。引发PropertyChanged事件方法时传递的字符串必须与视图模型的属性名称完全匹配

如果你正在使用C#5或6,那么切换到使用其中一种方法outlined here,你将无需传递魔法字符串。