WPF数据网格绑定工具提示因表内容绑定刷新

时间:2016-06-19 14:04:27

标签: wpf mvvm binding datagrid tooltip

我有一个WPF应用程序,它有一个数据网格,其中有一个可观察的集合,表示它的数据。 集合中的数据将应用于单元格的内容和行的工具提示,如下面的xaml代码所示:

<DataGrid ItemsSource="{Binding ViewModelItems}">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Time" Binding="{Binding Path=Time}" IsReadOnly="True" CanUserSort="False"/>
                        <DataGridTextColumn Header="Color" Binding="{Binding Path=Color}"  IsReadOnly="True" CanUserSort="False"/>
                    </DataGrid.Columns>
                    <DataGrid.RowStyle>
                        <Style TargetType="DataGridRow">
                            <Setter Property="ToolTip">
                                <Setter.Value>
                                    <TextBlock Text="{Binding Path=Notes}" />
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGrid.RowStyle>
                </DataGrid>

视图模型当然包含相应的列表:

    public ObservableCollection<Item> ViewModelItems
    {
        get { return model.ModelItems; }
    }

并在模型中:

    private ObservableCollection<Item> _modelItems = new ObservableCollection<Item>();
    public ObservableCollection<Item> ModelItems { get { return _modelItems ; } }

项目类如下:

public class Item
{
    public string Time { get; set; }
    public string Color { get; set; }
    public string Notes { get; set; }
}

问题是这样的:

在模型范围内,我有一个触发器,每秒更新一次ModelItems,所以我可以得到&#34; Time&#34;数据网格字段每秒都会同步。

&#34; Notes&#34;位于ToolTip属性后面的字段不会更改。当我站在一排查看工具提示时,每次表格刷新其内容时它都会闪烁 - 意味着每秒钟的顶部消失并返回(尽管&#34;注释&#34;保持不变)

有没有办法避免工具提示闪烁?

我甚至尝试通过更新属性&#34;时间&#34;来更新不通过clear / add / remove更新ModelItems。 &#34;颜色&#34;直接,离开&#34; Notes&#34;属性没有触及它(在这种情况下,我必须实现ObservableCollection监听其属性PropertyChanged事件并提升CollectionChanged事件和Item类以在更新相关属性时引发PropertyChanged事件) 但它没有帮助。

1 个答案:

答案 0 :(得分:0)

我认为每次调用ViewModelItems的getter时都会再次创建ItemsSource“ViewModelItems”。 试试

private ObservableCollection<Item> viewModelItems;
public ObservableCollection<Item> ViewModelItems
{
get 
{ 
if(viewModelItems == null)
{
viewModelItems = model.ModelItems; 
}
return viewModelItems;
}
}

在viemodel上捕获modelitems的属性更改并更新viewModelItems中的属性。这应该有助于工具提示闪烁。