C# 强制刷新绑定的UI组件

C# 强制刷新绑定的UI组件,c#,wpf,C#,Wpf,我知道这已经被问了好几次了,但是没有一个答案对我有用 <TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0"> <Tr

我知道这已经被问了好几次了,但是没有一个答案对我有用

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>
我在一个树状视图中得到了这个元素列表,当单击它时,它会在一个面板中显示它们的参数(带有文本框、标签、组合框和其他组件)。我还有一个按钮,允许将数据从组合中选择的一个元素复制到数据面板上当前显示的元素(“从…复制数据”)

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>
面板中的所有数据都绑定到一个类及其属性,treeview绑定到这些对象的集合

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>
问题是,当我按下“复制”按钮(即,将数据从对象A复制到当前对象)时,更改不会反映出来。但是,如果我更改了要显示的元素(单击树视图中的另一个对象),然后返回到更改的对象,更改就在那里。因此,它实际上是在更改实际数据,而不是刷新de数据绑定

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>
奇怪的是,如果我按两次“复制”按钮,更改确实会反映出来

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>
这可能是原因,我该如何解决

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>
这是一个应该更新的控件的XAML示例(我只发布了一个,因为有很多,但没有一个可用)、copy按钮和treeview:

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>
原科皮亚尔达托斯酒店 副驾驶

<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>

退房。并考虑使用您的列表。INotifyPropertyChanged接口的实现是wpf控件视图模型的一项要求,它基本上允许视图在数据更改时自行刷新。

听起来像INotifyPropertyChanged实现中出现了问题,但如果没有相关的代码示例,很难判断。我应该发布什么示例?我没有在我的任何类中使用该接口。我想我可能会在这里失去一些东西…发布尽可能小的问题重述。发布一些代码,试图通过将其限制为一个控件来缩短它。(它们都不起作用)尽管我的绑定迄今为止在两个方向上都工作得很好,但我会检查一下。如果在显示属性表单代码后更改属性表单代码,请单击“从…复制数据”按钮。
<TreeView SelectedItemChanged="TvProtocolosSelectedItemChanged" Margin="10,5" Name="tvProtocolos" HorizontalAlignment="Stretch" VerticalAlignment="Top" Width="200" Height="292" MinWidth="0">
                    <TreeView.ItemContainerStyle>
                        <Style TargetType="TreeViewItem">
                            <Setter Property="IsEnabled" Value="{Binding Path=Activo}"/>
                            <Setter Property="IsExpanded" Value="False"/>
                        </Style>
                    </TreeView.ItemContainerStyle>
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                            <StackPanel Orientation="Horizontal">
                                <Image Source="imagenes\file_icon.gif" Margin="0,0,5,0" />
                                <TextBlock Text="{Binding Path=Name}" ></TextBlock>
                            </StackPanel>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>

                </TreeView>