请教大佬们 WPF Binding 问题

2021-01-12 10:20:21 +08:00
 iSNN

最近在写 WPF,有许多显示状态颜色的按钮,60 个左右,按钮颜色用 Binding 绑了后台的属性,这个属性是没有用字段的,是在 get 里判断 status 状态字段 0,1,2...然后返回 Brushes 。

所以逻辑就是选择了一个选项,然后判断每个按钮状态修改 status,OnPropertyChanged 通知变更 Brush 属性。

我在 brush 的 get 里面断点或者 writeline 都证明确实变更时从新调用了 get,但是画面没有变,然后再调整画面大小,左右上下只要一拉伸或者缩小就像刷新一样,就又显示出来了,此时 get 方法没有再次调用。

推测,其实画面已经 get 到了新的颜色,只是没有渲染上去,调整大小时就从新渲染了画面。

请问各位大佬,有没有好的解决方案呢...

1660 次点击
所在节点    C#
7 条回复
codehz
2021-01-12 10:25:21 +08:00
你这种不伦不类的绑定是怎么回事。。wpf 怎么可能知道你 brush 和按钮的关系呢
Moyudawang
2021-01-12 10:41:52 +08:00
可以先试试给按钮绑定字符串有没有效果,然后再判断是哪里出了问题
iSNN
2021-01-12 10:51:12 +08:00
@codehz 绑都绑上了,怎么会不知道什么关系...
iSNN
2021-01-12 10:57:50 +08:00
@Moyudawang 每个按钮上有个表示个数的小气泡,用的 MaterialDesign 的 Badged 。数字确实没了,其实画面上有关这个选择后需要 OnPropertyChanged 的字段都挂了,但是我把 brush 的绑定注射后,其他绑定字段又是正常的,能实时渲染。刚刚最新的结果是,badge 和 brush 单独绑定是正常的,如果绑了 badge 又绑了 brush 就不行了。
forgottencoast
2021-01-12 22:08:53 +08:00
你发一个示例项目出来看看。
slowhand
2021-01-13 10:07:50 +08:00
找了一下自己以前用过的方法,类似这样。

public static readonly DependencyProperty TitleBackgroundProperty =
DependencyProperty.Register("TitleBackground", typeof(Brush), typeof(ButtonIcon), new PropertyMetadata(Brushes.Black));
/// <summary>
/// 标题背景
/// </summary>
public Brush TitleBackground
{
get { return (Brush)GetValue(TitleBackgroundProperty); }
set { SetValue(TitleBackgroundProperty, value); }
}

<Border Grid.Row="1" Background="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path= TitleBackground}"/>
oWangSir
2021-03-04 16:29:54 +08:00
如果确认绑定没有问题的话,尝试使用 UpdateLayout()更新布局,我尝试过上千个控件绑定颜色并实时更新,然而并没有遇到过这类问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744080

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX