嵌套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中定义的文本。你能给我一些解决这个问题的方法吗?

嵌套WPF datatemplate中的绑定

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

如果你正在使用c# 5或6,那么切换到使用这里列出的方法之一,你将消除传递魔术字符串的需要。