首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WPF DataTemplate和属性中的奇怪行为。

在WPF DataTemplate和属性中的奇怪行为。
EN

Stack Overflow用户
提问于 2009-09-05 08:28:07
回答 2查看 498关注 0票数 1

我有一个DataTemplate,它在StackPanel中显示按钮。每当用户单击某个按钮时,该按钮就会发光。因此,我已经在模板中编写了必要的DataTrigger,在正在绑定的属性中也编写了一个布尔条件。详情如下:

代码语言:javascript
运行
复制
<DataTemplate x:Key="ActionItemsTemplate" DataType="ActionItemViewModel">

        <ItemsControl IsTabStop="False" ItemsSource="{Binding}" Margin="6,2">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>                    
                    <StackPanel Orientation="Horizontal" />                        
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate>

                    <Button x:Name="ActionButton" Command="{Binding Path=Command }" Content="{Binding Path=DisplayName}" Style="{DynamicResource HeaderButton}"/>
                    <!-- Set special values for Selected Item -->
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding IsSelected}" Value="True">
                            <Setter TargetName="ActionButton" Property="Style"  Value="{DynamicResource MainWindowSelectedButton}"/>
                            <!--Command="{Binding Path=Command}" Content="{Binding Path=DisplayName}"-->
                        </DataTrigger>
                    </DataTemplate.Triggers>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>

我已经实现了INotifyPropertyChanged接口,属性ActionItems返回一个ObservableCollection。

问题是:当我更改ObservableCollection并调用INotifyPropertyChanged事件时,它不会直接反映在DataTemplate中,而只是更改属性。然而,如果我用它自己重新评估整个对象,它就会完美地工作。

e.g

代码语言:javascript
运行
复制
void Test1()
        {
           _commands[0].IsSelected = !_commands[0].IsSelected;               
            _commands[0] = _commands[0];      // Does not work If this line is commented out        
            ActionItems = _commands;
        }

问题是什么?

编辑:在本例中,我发现问题可能与DataBinding有关。

我现在遇到了一个类似的问题,我已经将Expander控件的IsExpanded属性绑定到TabPanel中的bool属性。当我切换bool属性时,值会在后面更改,但不会反映在显示中。但是,假设我更改了选项卡并返回,我看到已经发生了更改。这与这个问题有关吗here

我再次想知道这个问题会是什么(把它缩小一点:)

编辑2:解决第二个问题:我发现,每当更新IsExpanded属性上的编程更新时,都需要调用INotifyPropertyChanged接口的OnPropertyChangedEvent。至于最初的问题,情况似乎并非如此,我仍在试图找出问题出在哪里。:)

EN

回答 2

Stack Overflow用户

发布于 2009-09-05 11:22:54

我被引导相信你不能取代收藏,只改变它的内容。

票数 0
EN

Stack Overflow用户

发布于 2014-12-29 20:58:59

属性中的一个布尔条件,我也要绑定它

我不完全确定您在这里的意思,但我猜想这是您的“命令”上的IsSelected属性,并且您忘记为该属性引发PropertyChanged。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1382782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档