0

C# と xaml を使用して UWP デスクトップ アプリを作成しています。

ユーザー入力 (ボタンを押す) に応じて、FlipView の項目テンプレートの一部である2 つのテキスト ブロック ( TextBlock1TextBlock2としましょう) の可視性を変更する必要があります。

ボタンが初めて押された場合、 TextBlock1表示され、TextBlock2非表示 (または折りたたまれている)

ボタンを 2 回押すと、 TextBlock1折りたたまれ、TextBlock2が表示されます

次に、「サイクル」が繰り返され、最初から実行されます(コードを参照)

項目ソースはクラスのリストですList<SourceClass> SourceClassList

ソース クラスには、タイプが Visibility である 2 つのメンバーがあります (1 つのメンバーは TextBlock1 にバインドされ、2 番目のメンバーは TextBlock2 にバインドされます)。

Pageクラスでは、私が説明したように、各メンバーの変更の可視性が機能しています

しかし、変更はページから移動して戻ってきた場合にのみ表示されますが、前述のように動的に変更したい

OneWay と TwoWay のバインド モードを試しましたが、どれも機能しません。

MainPage.xaml

                 <FlipView x:Name="Cards" ItemsSource="{x:Bind SourceClassList, Mode=TwoWay}">
                    <FlipView.ItemTemplate>
                        <DataTemplate x:DataType="data:SourceClass" >
                            <StackPanel>
                                <TextBlock x:Name="TextBlock1" Text="{x:Bind FrontSideOfCard }" Visibility="{x:Bind visibilityOfFrontSide }" />
                                <TextBlock x:Name="TextBlock2" Text="{x:Bind BackSideOfCard}" Visibility="{x:Bind visibilityOfBackSide}"/>
                            </StackPanel>
                        </DataTemplate>
                    </FlipView.ItemTemplate>
                    <StackPanel/>
                </FlipView>

MainPage.xaml.cs

    public List<SourceClass> SourceClassList;
    public MainPage()
    {
        IsTextBlock1Visible = false;
        SourceClassList = //here is import from previous class which is not important for the problem 
        this.InitializeComponent();
    }                                                                             
    private void Flip_Click(object sender, RoutedEventArgs e)
    {
        if (IsTextBlock1Visible == false)
        {
            SourceClassList[cards.SelectedItem].visibilityOfBackSide = Visibility.Visible;
           SourceClassList[cards.SelectedItem].visibilityOfFrontSide = Visibility.Collapsed;
            IsTextBlock1Visibl = true;
        }
        else
        {
            SourceClassList[cards.SelectedItem].visibilityOfBackSide = Visibility.Collapsed;
           SourceClassList[cards.SelectedItem].visibilityOfFrontSide = Visibility.Visible;
            IsTextBlock1Visibl = false;
        }
    }

SourceClass.cs

public string TextBlock1 { get; set; }
public string TextBlock2 { get; set; }

public Visibility visibilityOfFrontSide { get; set; }
public Visibility visibilityOfBackSide { get; set; }

public SourceClass(string txt1, string txt2)
{
    TextBlock1 = txt1;
    TextBlock2 = txt2;
    
    visibilityOfBackSide = Visibility.Collapsed;
    visibilityOfFrontSide = Visibility.Visible;
    
}

PS:バインディングは一般的に期待どおりに機能します

お時間をいただきありがとうございます:)

4

1 に答える 1