14

mvvm モデルの bool にプロパティがバインドされたExpanderコントロールがあります。IsExpandedバインディングは、エキスパンダーに触れない限り正常に機能します。エキスパンダーの矢印をクリックして展開すると、バインドが機能しなくなります。モデルで 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

ここで私を惹きつけたのは、それIsExpandedOneWayデフォルトであるということです。

<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>
//...

1 つの Expander を手動で展開/折りたたみしても、バインドは失われません...

于 2012-05-30T09:54:34.023 に答える
0

3つのことを行い、

ViewModelを実装していることを確認してくださいINotifyPropertyChanged。プロパティが変更されたときにビューモデルが通知しない場合、UIは変更を認識しません

モードをTwoWayに変更すると、エキスパンダーが変更されたときにビュー モデルが更新され、ビュー モデルが変更されたときにエキスパンダーが更新されます。

最後に、上記の 2 つが機能しない場合は、デバッグ コンバーターを使用して、バインディングが失敗しているかどうかを確認します。これを行う方法の例がここにあります。これは、すべての wpf 開発者が必要とする手法です。

グループ内の別のボタンが設定されたときにラジオ ボタンのバインディングが失われるという問題があったことは知っていますが、ここでは問題ではないと思いますが、デバッグ コンバーターがこれを理解するのに役立ちます。

于 2010-02-01T22:49:24.690 に答える