में सिल्वरलाइट बाल खिड़कियां सिल्वरलाइट (3) में एमवीवीएम पैटर्न का उपयोग करके मैं चाइल्डविंडो/पॉपअप से डेटा प्राप्त करने का सही तरीका ढूंढने का प्रयास कर रहा हूं। उदाहरण के लिए: मेरे पास डेटा एंट्री फॉर्म वाला एक मुख्य पृष्ठ है और मैं ग्राहकों की सूची के साथ एक पॉपअप खोलना चाहता हूं। जब उपयोगकर्ता एक ग्राहक का चयन करता है तो मैं चयनित ग्राहक को मुख्य पृष्ठ में स्थानांतरित करना चाहता हूं।एमवीवीएम पैटर्न
मुख्य पृष्ठ
public partial class MainPage : UserControl
{
public MainPageViewModel ViewModel { get; private set; }
public MainPage()
{
InitializeComponent();
ViewModel = new MainPageViewModel();
DataContext = ViewModel;
}
private void SearchCustomer_Click(object sender, RoutedEventArgs e)
{
ViewModel.SearchCustomer();
}
}
public class MainPageViewModel: ViewModel
{
private string customer;
public string Customer
{
get { return customer; }
set { customer = value; RaisePropertyChanged("Customer"); }
}
public void SearchCustomer()
{
// Called from a view
SearchWindow searchWindow = new SearchWindow();
searchWindow.Closed += (sender, e) =>
{
if ((bool)searchWindow.DialogResult)
{
Customer = searchWindow.ViewModel.SelectedCustomer.ToString();
}
};
searchWindow.Show();
}
}
बाल खिड़की
public partial class SearchWindow : ChildWindow
{
public SearchWindowViewModel ViewModel { get; private set; }
public SearchWindow()
{
InitializeComponent();
ViewModel = new SearchWindowViewModel();
DataContext = ViewModel;
}
private void OKButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = ViewModel.OkButtonClick();
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = ViewModel.CancelButtonClick();
}
}
public class SearchWindowViewModel: ViewModel
{
private Customer selectedCustomer;
private ObservableCollection<Customer> customers;
public ObservableCollection<Customer> Customers
{
get { return customers; }
set {customers = value; RaisePropertyChanged("Customers"); }
}
public Customer SelectedCustomer
{
get { return selectedCustomer; }
set { selectedCustomer = value; RaisePropertyChanged("SelectedCustomer"); }
}
public SearchWindowViewModel()
{
Customers = new ObservableCollection<Customer>();
ISearchService searchService = new FakeSearchService();
foreach (Customer customer in searchService.FindCustomers("dummy"))
Customers.Add(customer);
}
public bool? OkButtonClick()
{
if (SelectedCustomer != null)
return true;
else
return null; // show some error message before that
}
public bool? CancelButtonClick()
{
return false;
}
}
यह सही तरीका है या नहीं है: यह वही है जो मैं इस समय का उपयोग कर रहा है (उदाहरण के) कोड है कुछ और "सरल"?
चीयर्स, रोक
धन्यवाद, मैं एक नज़र डालेगा। मुझे पता चला है कि मैं इसे "पूरी तरह से" गलत कर रहा हूं और मैंने पहले से ही कमांड का उपयोग करने के लिए अपना कोड बदल दिया है (आईसीओएमएंड को बाध्यकारी) और वीएम से संवाद हटा दें। अगला कदम मध्यस्थ पैटर्न को देखना है :) – rrejc
मैं सहमत हूं कि मध्यस्थ जाने का रास्ता है। इसके बारे में ब्लॉग किया गया: http://basaratali.blogspot.com/2010/12/mediator-for-mvvmlight-like-one-by.html – basarat