2011-10-28 21 views
7

मैं अपने आवेदन के लिए डब्ल्यूपीएफ और पीआरआईएसएम फ्रेमवर्क का उपयोग कर रहा हूं। मैं जिस पैटर्न का उपयोग कर रहा हूं वह एमवीवीएम (मॉडल - व्यू - व्यूमोडेल) है और मैं दृश्य-दृश्य में कोड-बैक से MouseLeftButtonUp ईवेंट लाने की कोशिश कर रहा हूं (इसलिए ईवेंट एमवीवीएम नियमों के अनुसार होगा)।बाइंड इवेंट को व्यूमोडेल

View.xaml:

<DataGrid x:Name="employeeGrid" Height="250" Margin="25,0,10,0" ItemsSource="{Binding DetacheringenEmployeesModel}" IsReadOnly="True" ColumnHeaderStyle="{DynamicResource CustomColumnHeader}" AutoGenerateColumns="False" RowHeight="30"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseLeftButtonUp"> 
       <i:InvokeCommandAction Command="{Binding EmployeeGrid_MouseLeftButtonUp}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
<DataGrid.Columns> 

View.xaml.cs (कोड-पीछे):

public partial class UC1001_DashBoardConsultants_View 
{ 
    public UC1001_DashBoardConsultants_View(UC1001_DashboardConsultantViewModel viewModel) 
    { 
      InitializeComponent(); 
      DataContext = viewModel; 
    } 
} 

ViewModel.cs:

public void EmployeeGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    // insert logic here 
} 

अभी के लिए मैं इस राशि मुख्य विचार यह है कि, जब मैं डेटाग्रिड में किसी सेल पर क्लिक करता हूं, तो ईवेंट आग लग जाएगा। मैंने पहली बार कोड के पीछे कोड की कोशिश की, और यह काम किया। मुझे EventTriggers के साथ अब तक मिल गया है, लेकिन जब मैं डीबग करता हूं और सेल पर क्लिक करता हूं, तो मेरा डीबगर विधि में नहीं आता है।

क्या किसी को यह पता है कि इसे कैसे ठीक किया जाए? अग्रिम में धन्यवाद!

पीएस: क्या यह (ऑब्जेक्ट प्रेषक) पैरामीटर के साथ भी काम करता है जब मैं ऐसा करता हूं? क्योंकि मुझे ActiveCell प्राप्त करने के लिए मेरे ViewModel में DataGrid की आवश्यकता है, मैंने अभी क्लिक किया है।

संपादित करें:

घटना बाध्यकारी कमान के साथ काम किया!

मैं अपने डेटा ग्रिड में इस है:

<DataGridTextColumn Header="Okt" Width="*" x:Name="test" > 
    <DataGridTextColumn.ElementStyle> 
      <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="Tag" Value="{Binding Months[9].AgreementID}"/> 

मैं ViewModel करने के लिए टैग संपत्ति कैसे बाध्य कर सकते हैं? मुझे पता है कि यह पहले से ही ViewModel से बंधे हैं, लेकिन जैसा कि आप देख सकते हैं कि मान एक ऐरे/सूची और प्रति कॉलम से आता है, मान अलग है।

उत्तर

10

InvokeCommandAction की आवश्यकता है ICommand नहीं एक ईवेंट हैंडलर बाध्य होने के लिए के रूप में आप (EmployeeGrid_MouseLeftButtonUp) बाध्य कर दिया है।

तो तुम ViewModel में एक कमांड लागू कर सकते हैं और यह करने के लिए बाध्य:

देखें मॉडल:

public ICommand SomeActionCommand { get; set; } 

XAML:

<i:InvokeCommandAction Command="{Binding SomeActionCommand}" /> 
+0

धन्यवाद, कि पूरी तरह से काम किया! क्या आपके पास कमांड (पैरामीटर या कुछ के रूप में) के साथ डेटाग्रिड को पास करने का सुझाव भी है, इसलिए मैं इसे अपने व्यूमोडेल में एक्सेस कर सकता हूं? –

+0

@ जेले कैपेनबर्ग: नहीं, व्यूमोडेल में एक संपूर्ण यूआई कंटेनर पास करना एमवीवीएम दृष्टिकोण नहीं है, व्यूमोडेल को विशिष्ट यूआई कार्यान्वयन के बारे में कुछ नहीं पता होना चाहिए (आज आप छुटकारा पा रहे हैं, लेकिन शायद कल - ट्री व्यू ताकि व्यूमोडेल को दोबारा संशोधित किया जाए, गलत है)। आप इस आदेश में क्या करने की कोशिश कर रहे हैं? – sll

+0

मुझे अपने व्यू मॉडेल में क्लिक किए गए सेल को प्राप्त करने की आवश्यकता है क्योंकि सेल में टेक्स्टमॉक है जिसमें मुझे ViewModel में आवश्यकता है। - उत्तर के रूप में पहले ही चिह्नित किया गया है क्योंकि आईसीओएमएंड प्राथमिक रूप से मुझे चाहिए था! –

संबंधित मुद्दे