我有一个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>
答案 0 :(得分:7)
如果您删除了Mode=OneWay
那可以解决问题吗?
在读取其他CTQ(对GUI的更改不影响模型)时,我没有很好的建议如何限制基础数据看到的更改。有什么区别:
myModel.MyProperty = true; // in *your* code behind
和
myModel.MyProperty = true; // done by a binding
答案 1 :(得分:5)
我在这里发现的是IsExpanded
默认为OneWay
,所以
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Expanded}"/>
</Style>
不按我预期的方式工作。只有当您添加Mode=TwoWay
时,它才有效(即项目开始关注我的Expanded
属性并更新它),如
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Expanded, Mode=TwoWay}"/>
</Style>
答案 2 :(得分:1)
使用Silverlight我这样做:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
<Expander Name="pExpander" IsExpanded="True" Header="Preview">
<i:Interaction.Triggers>
<ei:PropertyChangedTrigger Binding="{Binding ShowPreview, Mode=OneWay}">
<ei:ChangePropertyAction PropertyName="IsExpanded" Value="{Binding ShowPreview, Mode=OneWay}"/>
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
<TextBlock Text="{Binding Path=Message, Mode=OneWay}"></TextBlock>
</Expander>
<Expander Name="pExpander1" IsExpanded="True" Header="Preview 1">
<i:Interaction.Triggers>
<ei:PropertyChangedTrigger Binding="{Binding ShowPreview, Mode=OneWay}">
<ei:ChangePropertyAction PropertyName="IsExpanded" Value="{Binding ShowPreview, Mode=OneWay}"/>
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
<TextBlock Text="{Binding Path=Message1, Mode=OneWay}"></TextBlock>
</Expander>
//...
当您手动扩展/折叠一个Expander时,绑定不会丢失......
答案 3 :(得分:0)
做三件事,
确保您的ViewModel
正在实施INotifyPropertyChanged
。如果您的视图模型在属性更改时没有通知,您的ui将不会知道更改
将模式更改为TwoWay
,您希望在扩展器更改时更新视图模型,并且希望在视图模型更改时更新扩展器
最后,如果以上两个不起作用,请使用调试转换器来确定绑定是否失败。有一个例子here如何做到这一点。这是每个wpf开发人员都需要的技术。
我知道单选按钮存在问题,当设置了组中的另一个按钮时,它们会丢失绑定,我不认为这是问题,但调试转换器可以帮助您解决这个问题。 / p>