คำถามติดแท็ก mvvm

Model-View-ViewModel (MVVM) เป็นรูปแบบการออกแบบสถาปัตยกรรมสำหรับการใช้งานอินเทอร์เฟซผู้ใช้ที่แยก UI (มุมมอง) ออกจากข้อมูล (โมเดล) ผ่านตรรกะการนำเสนอ (ViewModel)

3
AndroidViewModel vs ViewModel
ด้วยการแนะนำของห้องสมุด Android สถาปัตยกรรมองค์ประกอบในชั้นเรียนใหม่ ๆ ที่ถูกนำมารวมทั้งและAndroidViewModel ViewModelอย่างไรก็ตามฉันมีปัญหาในการค้นหาความแตกต่างระหว่างสองคลาสนี้ เอกสารชัดถ้อยชัดคำอธิบายAndroidViewModelดังต่อไปนี้: แอปพลิเคชันตระหนักถึงบริบท ViewModel ฉันซาบซึ้งในความกะทัดรัด แต่สิ่งนี้บอกเป็นนัย ๆ ว่าอะไร? เมื่อเราควรเลือกที่จะใช้AndroidViewModelมากกว่าViewModelและในทางกลับกัน?

3
ดีหรือไม่ดีสำหรับ Dialogs ใน wpf ด้วย MVVM?
เมื่อเร็ว ๆ นี้ฉันมีปัญหาในการสร้างกล่องโต้ตอบเพิ่มและแก้ไขสำหรับแอป wpf ของฉัน สิ่งที่ฉันต้องการทำในรหัสของฉันคือสิ่งนี้ (ส่วนใหญ่ฉันใช้วิธีแรกใน viewmodel กับ mvvm) ViewModel ซึ่งเรียกหน้าต่างโต้ตอบ: var result = this.uiDialogService.ShowDialog("Dialogwindow Title", dialogwindowVM); // Do anything with the dialog result มันทำงานยังไง? ก่อนอื่นฉันสร้างบริการโต้ตอบ: public interface IUIWindowDialogService { bool? ShowDialog(string title, object datacontext); } public class WpfUIWindowDialogService : IUIWindowDialogService { public bool? ShowDialog(string title, object datacontext) { …
148 c#  .net  wpf  mvvm  modal-dialog 

12
การจัดการเหตุการณ์การปิดหน้าต่างด้วย WPF / MVVM Light Toolkit
ฉันต้องการจัดการ Closingกิจกรรม (เมื่อผู้ใช้คลิกปุ่ม 'X' ด้านขวาบน) ของหน้าต่างของฉันเพื่อแสดงข้อความยืนยันหรือ / และยกเลิกการปิดท้าย ฉันรู้วิธีการทำเช่นนี้ในโค้ด - เบื้องหลัง: สมัครสมาชิกกับClosingเหตุการณ์ของหน้าต่างจากนั้นใช้CancelEventArgs.Cancelคุณสมบัติ แต่ฉันใช้ MVVM ฉันไม่แน่ใจว่ามันเป็นแนวทางที่ดี ฉันคิดว่าวิธีการที่ดีคือการผูกClosingกิจกรรมไว้Commandใน ViewModel ของฉัน ฉันลองแล้ว: <i:Interaction.Triggers> <i:EventTrigger EventName="Closing"> <cmd:EventToCommand Command="{Binding CloseCommand}" /> </i:EventTrigger> </i:Interaction.Triggers> ด้วยการเชื่อมโยงRelayCommandใน ViewModel ของฉัน แต่มันไม่ทำงาน (รหัสของคำสั่งไม่ได้ถูกเรียกใช้)
145 c#  wpf  xaml  mvvm  mvvm-light 

9
ตัวอย่างที่ดีของเทมเพลต MVVM
ฉันกำลังทำงานกับเทมเพลต Microsoft MVVM และค้นหาตัวอย่างที่ไม่มีรายละเอียดที่น่าผิดหวัง ตัวอย่าง ContactBook ที่รวมไว้แสดงการจัดการคำสั่งน้อยมากและตัวอย่างอื่น ๆ ที่ฉันพบคือจากบทความในนิตยสาร MSDN ที่มีแนวคิดคล้ายกัน แต่ใช้วิธีการที่แตกต่างกันเล็กน้อยและยังไม่มีความซับซ้อนใด ๆ มีตัวอย่าง MVVM ที่เหมาะสมที่อย่างน้อยแสดงการดำเนินการ CRUD ขั้นพื้นฐานและการเปลี่ยนโต้ตอบ / เนื้อหา คำแนะนำของทุกคนมีประโยชน์จริง ๆ และฉันจะเริ่มรวบรวมรายการทรัพยากรที่ดี กรอบ / แม่แบบ ชุดเครื่องมือ WPF Model-View-ViewModel ชุดเครื่องมือ MVVM Light ปริซึม Caliburn ของแน่นอน บทความที่มีประโยชน์ WPF แอพที่มีรูปแบบการออกแบบ Model-View-ViewModel การตรวจสอบข้อมูลใน. NET 3.5 การใช้ ViewModel เพื่อให้ข้อความแสดงข้อผิดพลาดการตรวจสอบความหมาย การตรวจสอบ ViewModel และ Model ตาม …
141 wpf  mvvm 

2
ปริซึมสำหรับ WPF คืออะไร
ฉันเจอสิ่งที่เรียกว่าปริซึมเร็ว ๆ นี้ Microsoft ผู้ดำเนินโครงการอธิบายว่า แนวทางสำหรับการใช้งานคอมโพสิตใน WPF และ Silverlight แม้หลังจากอ่านคำอธิบายโดยละเอียดแล้วฉันก็ยังไม่รู้ว่ามันเกี่ยวกับอะไร แต่ฉันก็กลัว ฉันหวังว่าที่นี่ใครบางคนสามารถให้คำอธิบายสั้น ๆ ที่ชัดเจนเกี่ยวกับสิ่งที่เป็นจริงปริซึมและทำไมฉันควรเรียนรู้มัน ตอนนี้ฉันเป็นนักพัฒนา WPF มาสองสามปีแล้วใช้ MVVM ที่ฉันมีร่วมกับผู้อื่นและได้พบกับคนที่ใช้ Prism เมื่อเร็ว ๆ นี้ แต่โดยส่วนตัวแล้วฉันรู้สึกไม่ค่อยดีนักที่นี่ โดยเฉพาะอย่างยิ่งฉันสงสัยเกี่ยวกับประเด็นต่อไปนี้: ปริซึมเป็นเพียงหนังสือ (หรือส่วนใหญ่) ตามที่กำหนดไว้ในเว็บไซต์ MSDNหรือไม่? มันรวมไลบรารีใด ๆ หรือไม่ถ้าใช่เพื่ออะไร ปริซึมเป็นกรอบ MVVM หรือไม่? ฉันควรจะใช้มันเป็น "กรอบงานอย่างเป็นทางการของ Microsoft MVVM" เหนือผู้อื่นที่นั่นหรือของฉันเองหรือไม่? มันให้ฉีดพึ่งพา? มันเกี่ยวข้องกับ MEF ด้วยวิธีนี้หรือไม่? สิ่งใดที่ฉันควรรู้เกี่ยวกับสิ่งที่ Prism ทำในฐานะนักพัฒนา WPF / Silverlight
137 wpf  mvvm  prism 

21
ตั้งโฟกัสบน TextBox ใน WPF จากมุมมองโมเดล
ฉันมีTextBoxและButtonในมุมมองของฉัน ตอนนี้ฉันกำลังตรวจสอบเงื่อนไขเมื่อคลิกปุ่มและหากเงื่อนไขกลายเป็นเท็จแสดงข้อความให้กับผู้ใช้จากนั้นฉันต้องตั้งค่าเคอร์เซอร์เป็นTextBoxตัวควบคุม if (companyref == null) { var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK, MessageBoxImage.Exclamation); cs.txtCompanyID.Focusable = true; System.Windows.Input.Keyboard.Focus(cs.txtCompanyID); } โค้ดด้านบนอยู่ใน ViewModel CompanyAssociationเป็นชื่อมุมมอง แต่เคอร์เซอร์ไม่ได้รับการตั้งค่าในไฟล์TextBox. xaml คือ: <igEditors:XamTextEditor Name="txtCompanyID" KeyDown="xamTextEditorAllowOnlyNumeric_KeyDown" ValueChanged="txtCompanyID_ValueChanged" Text="{Binding Company.CompanyId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="{Binding ActualWidth, ElementName=border}" Grid.Column="1" Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="0,5,0,0" IsEnabled="{Binding Path=IsEditable}"/> <Button Template="{StaticResource …
129 c#  wpf  xaml  mvvm  textbox 

6
การพุชคุณสมบัติ GUI แบบอ่านอย่างเดียวกลับเข้าสู่ ViewModel
ฉันต้องการเขียน ViewModel ที่มักจะรู้สถานะปัจจุบันของคุณสมบัติการอ้างอิงแบบอ่านอย่างเดียวจาก View โดยเฉพาะ GUI ของฉันมี FlowDocumentPageViewer ซึ่งแสดงทีละหน้าจาก FlowDocument FlowDocumentPageViewer แสดงคุณสมบัติการอ้างอิงแบบอ่านอย่างเดียวสองรายการที่เรียกว่า CanGoToPreviousPage และ CanGoToNextPage ฉันต้องการให้ ViewModel ของฉันทราบค่าของคุณสมบัติ View ทั้งสองนี้เสมอ ฉันคิดว่าฉันสามารถทำได้ด้วยฐานข้อมูล OneWayToSource: <FlowDocumentPageViewer CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...> หากอนุญาตสิ่งนี้จะสมบูรณ์แบบ: เมื่อใดก็ตามที่คุณสมบัติ CanGoToNextPage ของ FlowDocumentPageViewer เปลี่ยนไปค่าใหม่จะถูกผลักลงไปในคุณสมบัติ NextPageAvailable ของ ViewModel ซึ่งเป็นสิ่งที่ฉันต้องการ ขออภัยสิ่งนี้ไม่ได้รวบรวม: ฉันได้รับข้อผิดพลาดว่าคุณสมบัติ 'CanGoToPreviousPage' เป็นแบบอ่านอย่างเดียวและไม่สามารถตั้งค่าจากมาร์กอัปได้ เห็นได้ชัดว่าคุณสมบัติแบบอ่านอย่างเดียวไม่รองรับการเชื่อมต่อฐานข้อมูลใด ๆแม้แต่การเชื่อมต่อฐานข้อมูลที่เป็นแบบอ่านอย่างเดียวที่เกี่ยวกับคุณสมบัตินั้น ฉันสามารถทำให้คุณสมบัติของ ViewModel ของฉันเป็น DependencyProperties และทำการผูก OneWay ไปในทางอื่น …

9
อาร์กิวเมนต์เพิ่มเติมของ Android ViewModel
มีวิธีส่งอาร์กิวเมนต์เพิ่มเติมไปยังตัวAndroidViewModelสร้างที่กำหนดเองของฉันหรือไม่ยกเว้นบริบทของแอปพลิเคชัน ตัวอย่าง: public class MyViewModel extends AndroidViewModel { private final LiveData<List<MyObject>> myObjectList; private AppDatabase appDatabase; public MyViewModel(Application application, String param) { super(application); appDatabase = AppDatabase.getDatabase(this.getApplication()); myObjectList = appDatabase.myOjectModel().getMyObjectByParam(param); } } และเมื่อฉันต้องการใช้ViewModelคลาสที่กำหนดเองของฉันฉันใช้รหัสนี้ในส่วนของฉัน: MyViewModel myViewModel = ViewModelProvider.of(this).get(MyViewModel.class) ดังนั้นฉันจึงไม่รู้ว่าจะส่งอาร์กิวเมนต์เพิ่มเติมString paramไปยังประเพณีของฉันViewModelได้อย่างไร ฉันสามารถส่งผ่านบริบทของแอปพลิเคชันเท่านั้น แต่ไม่สามารถโต้แย้งเพิ่มเติมได้ ฉันจะขอบคุณทุกความช่วยเหลือ ขอบคุณ. แก้ไข: ฉันได้เพิ่มรหัสแล้ว ฉันหวังว่าตอนนี้จะดีขึ้น

3
ViewModelLocator คืออะไรและข้อดี / ข้อเสียเมื่อเทียบกับ DataTemplates คืออะไร?
ใครช่วยสรุปให้หน่อยได้ไหมว่า ViewModelLocator คืออะไรทำงานอย่างไรและข้อดี / ข้อเสียสำหรับการใช้งานเปรียบเทียบกับ DataTemplates ฉันได้ลองค้นหาข้อมูลใน Google แล้ว แต่ดูเหมือนว่าจะมีการใช้งานที่แตกต่างกันมากมายและไม่มีรายการที่โดดเด่นว่ามันคืออะไรและข้อดี / ข้อเสียของการใช้งาน

11
MVVM ใน WPF - จะแจ้งเตือน ViewModel ของการเปลี่ยนแปลงใน Model อย่างไร…หรือฉันควร?
ฉันกำลังจะผ่านบทความ MVVM บางส่วนใหญ่นี้และนี้ คำถามเฉพาะของฉันคือ: ฉันจะสื่อสารการเปลี่ยนแปลงโมเดลจากโมเดลเป็น ViewModel ได้อย่างไร ในบทความของ Josh ฉันไม่เห็นว่าเขาทำเช่นนี้ ViewModel จะถาม Model สำหรับคุณสมบัติเสมอ ในตัวอย่างของ Rachel เธอมีการนำแบบจำลองมาใช้INotifyPropertyChangedและหยิบยกเหตุการณ์ขึ้นจากแบบจำลอง แต่มีไว้เพื่อการบริโภคโดยการดูเอง (ดูบทความ / รหัสของเธอสำหรับรายละเอียดเพิ่มเติมว่าเหตุใดเธอจึงทำเช่นนี้) ฉันไม่เห็นตัวอย่างที่โมเดลแจ้งให้ ViewModel ทราบถึงการเปลี่ยนแปลงคุณสมบัติของโมเดล สิ่งนี้ทำให้ฉันกังวลว่าอาจจะไม่ได้ทำด้วยเหตุผลบางประการ มีรูปแบบสำหรับการแจ้งเตือน ViewModel ของการเปลี่ยนแปลงใน Model หรือไม่? ดูเหมือนว่าจะมีความจำเป็นเนื่องจาก (1) มี ViewModel มากกว่า 1 แบบสำหรับแต่ละรุ่นและ (2) แม้ว่าจะมี ViewModel เพียงตัวเดียวการกระทำบางอย่างในโมเดลอาจส่งผลให้คุณสมบัติอื่น ๆ เปลี่ยนไป ฉันสงสัยว่าอาจมีคำตอบ / ความคิดเห็นในรูปแบบ "ทำไมคุณถึงต้องการทำเช่นนั้น" ความคิดเห็นดังนั้นนี่คือคำอธิบายโปรแกรมของฉัน ฉันยังใหม่กับ MVVM …
112 c#  .net  wpf  mvvm 

23
วิธีแก้ปัญหาการป้อนอัตโนมัติของเบราว์เซอร์ AngularJS โดยใช้คำสั่ง
เมื่อส่งแบบฟอร์มใน AngularJS และใช้ฟังก์ชันการจำรหัสผ่านของเบราว์เซอร์และในการพยายามเข้าสู่ระบบครั้งต่อไปคุณให้เบราว์เซอร์กรอกแบบฟอร์มการเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่าน$scopeรูปแบบจะไม่เปลี่ยนแปลงตามการป้อนอัตโนมัติ แฮ็กสกปรกเพียงอย่างเดียวที่ฉันพบคือใช้คำสั่งต่อไปนี้: app.directive("xsInputSync", ["$timeout" , function($timeout) { return { restrict : "A", require: "?ngModel", link : function(scope, element, attrs, ngModel) { $timeout(function() { if (ngModel.$viewValue && ngModel.$viewValue !== element.val()) { scope.apply(function() { ngModel.$setViewValue(element.val()); }); } console.log(scope); console.log(ngModel.$name); console.log(scope[ngModel.$name]); }, 3000); } }; }]); ปัญหาคือngModel.$setViewValue(element.val());ไม่ได้เปลี่ยนโมเดลหรือมุมมองตามelement.val()ค่าที่ส่งคืน ฉันจะทำมันให้สำเร็จได้อย่างไร?

9
วิธีจัดการการพึ่งพาการฉีดในแอปพลิเคชัน WPF / MVVM
ฉันกำลังเริ่มแอปพลิเคชันเดสก์ท็อปใหม่และต้องการสร้างโดยใช้ MVVM และ WPF ฉันตั้งใจจะใช้ TDD ด้วย ปัญหาคือฉันไม่รู้ว่าฉันควรใช้คอนเทนเนอร์ IoC เพื่อฉีดการอ้างอิงกับรหัสการผลิตของฉันอย่างไร สมมติว่าฉันมีคลาสและอินเทอร์เฟซต่อไปนี้: public interface IStorage { bool SaveFile(string content); } public class Storage : IStorage { public bool SaveFile(string content){ // Saves the file using StreamWriter } } แล้วฉันก็มีคลาสอื่นที่มีIStorageการพึ่งพาสมมติว่าคลาสนี้เป็น ViewModel หรือชั้นธุรกิจ ... public class SomeViewModel { private IStorage _storage; public SomeViewModel(IStorage …

10
การเริ่มเหตุการณ์ดับเบิลคลิกจากรายการ WPF ListView โดยใช้ MVVM
ในแอปพลิเคชัน WPF โดยใช้ MVVM ฉันมี usercontrol พร้อมรายการมุมมองรายการ ในขณะทำงานจะใช้ databinding เพื่อเติมเต็ม listview ด้วยคอลเล็กชันของวัตถุ อะไรคือวิธีที่ถูกต้องในการแนบเหตุการณ์ดับเบิลคลิกเข้ากับรายการในมุมมองรายการเพื่อที่เมื่อรายการในมุมมองรายการถูกดับเบิลคลิกเหตุการณ์ที่เกี่ยวข้องในโมเดลมุมมองจะเริ่มทำงานและมีการอ้างอิงถึงรายการที่คลิก มันจะทำได้อย่างไรด้วยวิธี MVVM ที่สะอาดเช่นไม่มีรหัสอยู่ข้างหลังใน View?
102 wpf  mvvm 

17
ปิดหน้าต่างจาก ViewModel
ฉันกำลังสร้างการเข้าสู่ระบบโดยใช้window controlเพื่ออนุญาตให้ผู้ใช้ล็อกอินเข้าสู่WPFแอปพลิเคชันที่ฉันกำลังสร้าง จนถึงตอนนี้ผมได้สร้างวิธีการที่จะตรวจสอบว่าผู้ใช้จะได้เข้าในข้อมูลประจำตัวที่ถูกต้องสำหรับusernameและpasswordในtextboxบนหน้าจอเข้าสู่ระบบสองbindingproperties ฉันประสบความสำเร็จโดยการสร้างboolวิธีการเช่นนั้น public bool CheckLogin() { var user = context.Users.Where(i => i.Username == this.Username).SingleOrDefault(); if (user == null) { MessageBox.Show("Unable to Login, incorrect credentials."); return false; } else if (this.Username == user.Username || this.Password.ToString() == user.Password) { MessageBox.Show("Welcome " + user.Username + ", you have successfully logged in."); …
97 c#  wpf  mvvm 

5
ฉันจะตั้งค่า ViewModel บนหน้าต่างใน XAML โดยใช้คุณสมบัติ DataContext ได้อย่างไร
คำถามพูดได้ทั้งหมด ฉันมีหน้าต่างและได้พยายามตั้งค่า DataContext โดยใช้เนมสเปซแบบเต็มให้กับ ViewModel แต่ดูเหมือนว่าฉันจะทำอะไรผิดพลาด <Window x:Class="BuildAssistantUI.BuildAssistantWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DataContext="BuildAssistantUI.ViewModels.MainViewModel">
96 .net  wpf  xaml  mvvm 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.