14

我有一个Expander控件,其IsExpanded属性绑定到 mvvm 模型中的布尔值。在您不触摸扩展器之前,绑定工作正常。单击展开器中的箭头进行展开后,绑定将停止工作。在模型中将 bool ShowPreview 设置为 false 不会折叠扩展器。

<Expander Name="pExpander" 
          IsExpanded="{Binding Path=ShowPreview,Mode=OneWay}"
          Header="Preview">
    <TextBlock Text="{Binding Path=Message, Mode=OneWay}"></TextBlock>    
</Expander>
4

4 回答 4

7

如果您删除Mode=OneWay,是否可以解决问题?

在阅读您的其他 CTQ(对 GUI 的更改不会影响模型)后,对于如何限制基础数据看到的更改,我没有很好的建议。有什么区别:

myModel.MyProperty = true; // in *your* code behind

myModel.MyProperty = true; // done by a binding
于 2010-02-01T21:06:23.570 回答
6

让我在这里发现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>
于 2010-05-21T09:31:58.273 回答
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>
//...

当您手动展开/折叠一个扩展器时,绑定不会丢失...

于 2012-05-30T09:54:34.023 回答
0

做好三件事,

确保您ViewModel正在实施INotifyPropertyChanged. 如果您的视图模型在属性更改时没有通知它,您的 ui 将不会知道更改

将 Mode 更改为TwoWay,您希望在扩展器更改时更新您的视图模型,并且您希望在视图模型更改时更新您的扩展器

最后,如果上述两个不起作用,请使用调试转换器来确定您的绑定是否失败。这里有一个如何做到这一点的例子。这是每个 wpf 开发人员都需要的技术。

我知道单选按钮存在问题,当设置组中的另一个按钮时,它们会失去绑定,我认为这不是问题,但是调试转换器会帮助您解决这个问题。

于 2010-02-01T22:49:24.690 回答