0

アプリケーションを開発しましたが、次の部分で問題に直面しました。

観察可能なアイテムのコレクション(「アイテム」)に正確なアイテムをバインドし、番号を表示する「テキストブロック」があります。各項目には「Count」というプロパティがあります。

ユーザーが longlistselector (バインディング アイテム) のスタックパネルにある現在のテキストブロックをタップすると、新しい番号を表示するためにこのテキストブロックが必要です (アイデアは、ユーザーがテキストブロックをタップするたびに、番号が 1 ずつ増えます)。

私が発見した唯一の方法は、現在のピボット項目 (テキストブロックが配置されている場所) に移動するたびに、更新された項目 (および「カウント」プロパティ) が格納されている監視可能なコレクションからピボット項目のデータを強制的にリロードすることです。しかし動作が遅くてうまくいきません。

ユーザーが現在のテキストブロックをタップするたびにテキストブロックに数字を表示する方法を教えてください。

<phone:PivotItem Name="Documents" Header="Documents" Margin="0" >
                <Grid>
                    <phone:LongListSelector ItemsSource="{Binding Items}" >
                        <phone:LongListSelector.ItemTemplate>
                            <DataTemplate>


                                    <StackPanel  Orientation="Horizontal"
                                        Height="95" >


                                        <TextBlock Tap="Plus_Tap" Visibility="Visible" Width="20" Height="50" Text="{Binding Count}" FontFamily="Segoe WP Light"
                                                   FontSize="35" Foreground="White" Margin="2,0,0,2"/>

                                    </StackPanel>

                                </StackPanel>

                            </DataTemplate>

                        </phone:LongListSelector.ItemTemplate>


                    </phone:LongListSelector>


                </Grid>
            </phone:PivotItem>
namespace PackMan
{
    public partial class CategoryList : PhoneApplicationPage
    {
        public CategoryList()
        { 
            InitializeComponent();
            DataContext = App.ViewModel;
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {

            if (!App.ViewModel.IsDataLoaded)
            {
                App.ViewModel.LoadData();
            }
        }
        private void Plus_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            PackList selectedList = (sender as TextBlock).DataContext as PackList;
            selectedList.Count += 1;

            NavigationService.Navigate(new Uri("/CategoryList.xaml?Documents", UriKind.Relative));

        }
    }
}

xaml UI を介してデータを更新した後、ピボット アイテムのデータを更新する方法は?

ここで、彼自身の質問に対する投稿された回答の最後にある男が次のように書いています。しかし、ViewModel にはなく、Packlist.cs で宣言されている「Items」オブザーバブル コレクションからデータをロードします。多分これが役立つでしょう。

ここで、 ObservableCollection "Items" のアイテムの Count プロパティを増やします。

private void Plus_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            PackList selectedList = (sender as TextBlock).DataContext as PackList;
            selectedList.Count += 1;

テキストブロックをタップすると、テキストブロックのテキストに変更がありません。戻るをタップすると、メニュー ページに戻ります。再びピボット アイテム ページを開くと、テキスト ブロックのテキスト (番号) が 1 ずつ増えていることがわかります。コンストラクターと OnNavigatedTo メソッドにこれがあるため、変更はページ (ピボット項目) をリロードしたときにのみ表示されます。

 public CategoryList()
        { 
            InitializeComponent();
            DataContext = App.ViewModel;
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {

            if (!App.ViewModel.IsDataLoaded)
            {
                App.ViewModel.LoadData();
            }
        }
LoadData() - loads OBservable collection ("Items"), which has items, and Count as one   of its properties:

public void LoadData()
        {
            this.Items = LoadNewLists();
            this.IsDataLoaded = true;
        }

たぶん、テキストブロックをタップするとすぐにテキストブロックのテキストを変更する方法を教えてください(テキストブロック)。この瞬間にアプリの開発を 2 日目に止めてしまったので、アドバイスをいただければ幸いです。

4

1 に答える 1