WPF Expander IsExpanded绑定

时间:2010-02-01 20:59:18

标签: c# .net wpf expander

我有一个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>

4 个答案:

答案 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>