EDIT:DataTemplateが呼び出されても再度実行されないため、問題があるようです。 2回目の呼び出し時にDataTemplateを強制的に実行するにはどうすればよいですか?MVVM DataTemplateのセルをデータの集まりで変更する
私は、各行がチェックボックスとラベルであるリストビューを持っています。ユーザーがラベルまたはチェックボックスを選択すると、チェックボックスがアクティブになり、アイテムがselectedListに追加されます。このリストビューの外に、このリストからアイテムを追加/削除する他の方法があります。
リストビューがアクティブになって表示されたら、selectedListの現在のアイテムにチェックマークが付いているようにします。私はselectedListとすべてのアイテムとの間の比較を実行することでこれを行うことができます。両方に存在する場合はチェックします。
ここに問題があります。ラベルのテキストはバインド可能なプロパティなので、データテンプレートの初期化時には使用できません(したがって、値がselectedItemのリストにあるかどうかは確認できません)。以下のコードはlistviewが初めて表示されたときに動作します(私もChildAddedを試しました、うまくいきませんでした)。
cell.Appearing += (s, e) =>
{
foreach (FloorDetailsViewModel floor in _viewModel.SelectedFloorsList)
{
if (floor.Name == label.Text)
checkBox.Source = activeImage;
}
};
手動でそれを呼び出すことによってするDataTemplateを再実行することができない時はいつでも
Bindable CheckBoxはどのようにVM側で動作しますか?変数である各フロア項目のチェックボックスが必要です。唯一の方法は、私のFloorクラスに「選択された」プロパティを追加することです。これはちょっとした解決策です。リストビューを適切に表示するために、クラスにプロパティを含めることは望ましくありません。 明確にするために、リストビューのItemSourceはFloorオブジェクトのリストです。ラベルはフロアの名前に設定されていますが、コースの名前はクラスの一部であることが必要です。 1つのリストビューの「選択された」プロパティーは表示されません。 –
チェックボックスがViewCell(「名前」など)にある場合、それはFloorオブジェクト内にあるはずです。これは私の意見です –
それは動作するが、私はそれが良い解決策ではないと思う。 DataTemplatesのItemSourceをnullに設定して正しい値に戻すことで、それを実行できました。これにより、セルのOnAppearリスナーが正しく呼び出されました。また良い解決策ではありませんが、良いことはないかもしれません。 –