我有一个Expander
控件,它的IsExpanded
属性绑定到mvvm模型中的bool。绑定工作正常,直到你不接触扩展器。一旦你点击扩展器中的箭头来扩展,绑定停止工作。在模型中将bool ShowPreview设置为false不会折叠扩展器。
<Expander Name="pExpander"
IsExpanded="{Binding Path=ShowPreview,Mode=OneWay}"
Header="Preview">
<TextBlock Text="{Binding Path=Message, Mode=OneWay}"></TextBlock>
</Expander>
5条答案
按热度按时间wb1gzix01#
如果删除
Mode=OneWay
,是否可以解决问题?在阅读了您的其他CTQ(对GUI的更改不影响模型)之后,我没有一个好的建议来限制底层数据所看到的更改。
还有
8ulbf1ek2#
这里让我困惑的是,默认情况下,
IsExpanded
是OneWay
,所以只有当你添加了
Mode=TwoWay
,它才能工作(也就是说,项目开始关注我的Expanded
属性,并更新它),如gjmwrych3#
在Silverlight中,我这样做:
当您手动展开/折叠一个Expander时,绑定不会丢失...
30byixjq4#
做三件事
确保您的
ViewModel
实现了INotifyPropertyChanged
。如果视图模型在属性更改时没有通知它,那么您的ui将不会知道更改将Mode更改为
TwoWay
,您希望在扩展器更改时更新视图模型,并且希望在视图模型更改时更新扩展器最后,如果上面两个都不起作用,使用调试转换器来确定你的绑定是否失败。有一个例子here如何做到这一点。这是每个wpf开发人员都需要的技术。
我知道单选按钮有一个问题,当组中的另一个按钮被设置时,它们会失去绑定,我不认为这是这里的问题,但是调试转换器将帮助您解决这个问题。
hjqgdpho5#
在我的例子中(.NET Framework 4),扩展的setter没有被调用,因为它的绑定需要
UpdateSourceTrigger=PropertyChanged
,而设置Mode=TwoWay
(如other answer中所建议的)不能解决这个问题。最后我使用了以下XAML:
我的
Expander
在一个DataGridTemplateColumn
中(在一行中)。