use*_*256 5 wpf binding datagrid tooltip mvvm
我有一个 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>
Run Code Online (Sandbox Code Playgroud)
视图模型当然包含相应的列表:
public ObservableCollection<Item> ViewModelItems
{
get { return model.ModelItems; }
}
Run Code Online (Sandbox Code Playgroud)
并在模型中:
private ObservableCollection<Item> _modelItems = new ObservableCollection<Item>();
public ObservableCollection<Item> ModelItems { get { return _modelItems ; } }
Run Code Online (Sandbox Code Playgroud)
Item的类如下:
public class Item
{
public string Time { get; set; }
public string Color { get; set; }
public string Notes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是这样的:
在模型范围中,我有一个每秒更新 ModelItems 的触发器,因此我可以每秒同步“时间”数据网格字段。
ToolTip 属性后面的“注释”字段不会更改。当我站在一排查看工具提示时,每次表格刷新其内容时它都会闪烁 - 意味着每秒顶部提示都会消失并返回(尽管“注释”保持不变)
有没有办法避免工具提示闪烁?
我什至尝试不通过clear/add/remove来更新ModelItems,而是直接更新属性“Time”“Color”,并保留“Notes”属性而不触及它(在这种情况下,我必须实现ObservableCollection监听其属性PropertyChanged事件并引发 CollectionChanged 事件和 Item 类以在更新相关属性时引发 PropertyChanged 事件),但这没有帮助。
小智 0
我认为每次调用 ViewModelItems 的 getter 时都会再次创建 ItemsSource“ViewModelItems”。尝试
private ObservableCollection<Item> viewModelItems;
public ObservableCollection<Item> ViewModelItems
{
get
{
if(viewModelItems == null)
{
viewModelItems = model.ModelItems;
}
return viewModelItems;
}
}
Run Code Online (Sandbox Code Playgroud)
捕获 viemodel 上模型项的属性更改并更新 viewModelItems 中的属性。这应该有助于工具提示闪烁。
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |