0

内部に 2 つの TabItems を持つ TabControl を含むウィンドウがあります。2 番目のタブ内には、ビュー モデル内の文字列プロパティにバインドされた TextBox があります。ユーザーが別のタブをクリックするたびに(およびユーザーがウィンドウを閉じた場合にも)、このプロパティをクリアできるようにしたい(または関連付けによってバインドされるため、プロパティをクリアする TextBox )。私はMVVMパターンに従おうとしているので、XAMLだけでこれを達成できることを望んでいます(そのため、コードビハインドはなく、ビューモデルはビューにあるTabControlまたはTextBoxを認識してはなりません)。

私はいくつかの異なることを試してみましたが、うまく機能させることができません.WPFは上手になっていますが、まだかなり慣れていません. タブ内には、ListViews と ComboBoxes もあります。私の理解では、SelectionChanged イベントがバブルされるため (タブの選択が変更された場合と同じ)、おそらくそれを避ける必要があります。どんな助けでも大歓迎です。

これが私の試みの1つです(要点を示すスニペット):

<TabControl>
<TabItem>
    ...Stuff in first tab goes here
</TabItem>

<TabItem Header="Rules">
    <TabItem.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{IsSelected}" Value="True">
                    <Setter TargetName="UserBox" Property="Text" Value="" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TabItem.Style>


    <GroupBox>
        <UniformGrid>
            <ListView ItemsSource="{Binding Source={StaticResource rulesViewModel}, Path=RulesList}">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Rules"/>
                    </GridView>
                </ListView.View>
            </ListView>

            <DockPanel>
                <TextBox Name="UserBox" Text="{Binding Source={StaticResource rulesViewModel}, Path=User}" />
            </DockPanel>
        </UniformGrid>
    </GroupBox>
</TabItem>

Binding="{IsSelected}" という行が間違っていると確信しています。しかし、正しいプロパティをターゲットにする方法がわかりません。何か案は?

4

2 に答える 2

0

他のタブをクリックしてコンテンツをクリアしたいタブの SelectedIndex = -1 を設定する必要があります。

SelectedIndex = -1 はデフォルトのタブなので、基本的にはこのタブをデフォルトのタブにしています。今、条件はそのようになります

SelectedIndex の場合 ! = -1、テキストをクリアするか、アプリケーションのシャットダウン時にテキストをクリアする必要があります

ロジックを提供しました。コードを記述できるようになりました:)

于 2013-07-11T04:10:16.370 に答える
0

SelectionChanged最善の方法は、インタラクティブ ライブラリを使用してプロパティをキャッチし、プロパティを変更することだと思います。次のようになります。

<TabControl>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <ei:ChangePropertyAction TargetObject="{Binding Path=Path.To.ViewModel}" PropertyName="MyProperty" Value="" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TabControl>

TextBox の値を変更することもできます。その場合、ChangePropertyActionオブジェクトを次のように変更する必要があります。

<ei:ChangePropertyAction TargetName="UserBox" PropertyName="Text" Value="" />
于 2013-07-10T21:23:26.563 に答える