第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將集合引用從視圖傳遞到虛擬機時跟蹤集合引用的最佳方法是什么

將集合引用從視圖傳遞到虛擬機時跟蹤集合引用的最佳方法是什么

C#
慕標5832272 2023-07-22 16:38:40
我的應用程序是翻譯應用程序。它包含傳遞給不同視圖模型的翻譯列表。這些視圖模型可能會修改這些列表,包括添加和刪除操作。為此,我ObservableCollection在構造函數(shù)中將此列表轉換為 an ,并且我的列表不再被修改。我知道轉換為 anObservableCollection會創(chuàng)建一個新對象,并且引用不再相同。它對于相關視圖來說工作得很好,但是一旦我想更改為另一個視圖,列表就不會更新。我想知道解決這個問題的最佳方法是什么?我認為我可以創(chuàng)建一個自定義 ObservableCollection,其中包含相應的列表,并在完成添加或刪除操作時自動更新它??雌饋砼c此類似的東西。看法public partial class MainWindow : Window{    private void ListViewItem_PreviewMouseDown(objectsender,MouseButtonEventArgs e)    {        // this is where I instanciate the viewModel, and the         // list<Translation> isn't modify once I close the view        DataContext = new ModifyWordVM(translations);    }}視圖模型public class ModifyWordVM: INotifyPropertyChanged{    private ObservableCollection<TranslationVM> translations;    public ObservableCollection<TranslationVM> Translations    {        get { return translations; }        set { translations = value; OnPropertyChanged("Translations"); }    }    public ModifyWordVM(List<Translation> translations)    {        // Converting list to ObservableCollection        Translations = ConvertionHelper.ConvertTo(translations);    }}我想知道恢復修改后的列表的更干凈的方法是什么。
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經(jīng)驗 獲得超4個贊

您應該封裝翻譯及其操作。為此,只需引入一個類,例如TranslationService在所有相關視圖模型之間共享的類。為了省略臭單例,我將服務的實例添加到App.xaml資源中。


這個想法是翻譯列表的所有修改都發(fā)生在一個位置或類型中。與視圖的綁定源相同的類型。添加新翻譯時,視圖應調用ICommand視圖模型上的 a。該命令將AddTranslation調用TranslationService. 刪除也一樣。對翻譯集合的任何更改現(xiàn)在都將反映在整個應用程序中。


如果您還想捕獲實際翻譯的修改(例如重命名或編輯),則還TranslationService需要處理項目PropertyChanged的事件。 當項目屬性更改時,必須通過引發(fā)該屬性的事件來響應。這也需要實施這些項目。ObservableCollection

TranslationServicePropertyChangedObservableCollectionTranslationsINotifyPropertyChanged


App.xaml

共享TranslationService實例


<Application.Resources>

    <TranslationService x:Key="TranslationService">

        <TranslationService.DatabaseService>

            <DatabaseService />

        </TranslationService.DatabaseService>

    </TranslationService>

</Application.Resources>

MainWindow.xaml.cs


public partial class MainWindow : Window

{

    private void ListViewItem_PreviewMouseDown(objectsender,MouseButtonEventArgs e)

    {

        // Instantiate the view model and initialize DataContext from XAML instead.

        // This method became redundant.

    }

}

主窗口.xaml


<Window.DataContext>

  <ModifyWordVM>

    <ModifyWordVM.TranslationService>


      <!-- Reference the shared instance -->

      <StaticResource ResourceKey="TranslationService" />

    </ModifyWordVM.TranslationService>

  </ModifyWordVM>

</Window.DataContext>

修改WordVM.cs


public class ModifyWordVM: INotifyPropertyChanged

{    

    public ModifyWordVM()

    {}


    public AddTranslation(Translation translation) => this.translationService.AddTranslation(translation);


    public RemoveTranslation(Translation translation) => this.translationService.RemoveTranslation(translation);


    public TranslationService TranslationService {get; set;}


    public ObservableCollection<TranslationVM> Translations => this.translationService.Translations; 


}

翻譯服務.cs


public class TranslationService

{

    public TranslationService()

    {}


    public AddTranslation(Translation translation)

    {

        // Add translations

    }


    public RemoveTranslation(Translation translation)

    {

        // Remove translations

    }


    private DatabaseService databaseService;

    public DatabaseService DatabaseService

    {

        get => this.databaseService; 

        set 

        { 

            this.databaseService = value; 

            this.Translations = databaseService.getTranslations; 

         }

    }


    private ObservableCollection<TranslationVM> translations;

    public ObservableCollection<TranslationVM> Translations

    {

        get => this.translations;

        set 

        { 

            this.translations = value; 

            OnPropertyChanged("Translations"); 

         }

    }

}


查看完整回答
反對 回復 2023-07-22
  • 1 回答
  • 0 關注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號