2012-01-24 6 views
0

Silverlightのデータグリッドからメソッドを呼び出す際にmvvmの問題が発生しました。 各行のプロパティ変更イベントにトリガを登録したいと思います。Silverlight 4 - MVVMパターンのDataGridからの呼び出しメソッド

問題: - 別のデータコンテキスト(myMVVM)へとないMyEntityオブジェクト にメソッドをバインド - データ項目、コールや財産などのできるだけ多くの情報を入手し、OnPropertyChangedを

任意のアイデアにそれを渡しますか?

XAMLで
<Grid DataContext="{Binding myMVVM}"> 
     <data:DataGrid ItemsSource="{Binding MyCollection}"> 
      <data:DataGrid.Columns> 
       <data:DataGridTextColumn Binding="{Binding Text}"> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="PropertyChanged"> 
          <i:CallMethodAction TargetObject="{Binding}" Method="OnPropertyChanged"/> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
       </data:DataGridTextColumn> 
       <data:DataGridTextColumn Binding="{Binding Text2}" /> 
       <data:DataGridTextColumn Binding="{Binding Text3}" /> 
       <data:DataGridTextColumn Binding="{Binding Text4}" /> 
       <data:DataGridTextColumn Binding="{Binding Text5}" /> 
      </data:DataGrid.Columns> 
     </data:DataGrid>  
    </Grid> 





public class MyMVVM { 

    public System.Collections.Generic.List<MyEntry> MyCollection { get; set; } 

    public void OnPropertyChanged(object sender, MyEventArgs ea) { 
     DataGrid mySender = (DataGrid)sender; 
     MyEntry dataItem = ea.DataItem; 
     string propertyName = ea.PropertyName; 
    } 
} 


public class MyEntry : System.ComponentModel.INotifyPropertyChanged { 
    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 
    private string _text; 

    public string Text { 
     get { return _text; } 
     set { 
      _text = value; 
      RaisePropertyChangedEvent("Text"); 
     } 
    } 

    public string Text2 { get; set; } 
    public string Text3 { get; set; } 
    public string Text4 { get; set; } 
    public string Text5 { get; set; } 

    public void RaisePropertyChangedEvent(string propname) { 
     if (PropertyChanged != null) { 
      PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propname)); 
     } 
    } 
} 

答えて

0

は、あなたがDataGridTextColumnでPropertyChangedイベントに応答する:

これは私が持っているしたいものです。残念ながら、DataGridTextColumnにはイベントがありません。

セル内の変更に応答する場合は、その動作を直接DataGridに設定することをお勧めします。これにより、CellEditEndedイベントが提供されます。ここ

ソリューション:

<UserControl.Resources> 
    <ViewModel:MyViewModel x:Key="myViewModel"/> 
</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource SampleDataSource}}"> 
    <sdk:DataGrid d:LayoutOverrides="Width" AutoGenerateColumns="False" ItemsSource="{Binding Collection}"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="CellEditEnded"> 
     <ei:CallMethodAction TargetObject="{StaticResource myViewModel}" MethodName="OnPropertyChanged" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 

    <sdk:DataGrid.Columns> 
     <sdk:DataGridTextColumn Binding="{Binding Text}" Header="Text"/> 
     <sdk:DataGridTextColumn Binding="{Binding Text2}" Header="Text2"/> 
     <sdk:DataGridTextColumn Binding="{Binding Text3}" Header="Text3"/> 
     <sdk:DataGridTextColumn Binding="{Binding Text4}" Header="Text4"/> 
     <sdk:DataGridTextColumn Binding="{Binding Text5}" Header="Text5"/> 
    </sdk:DataGrid.Columns> 
    </sdk:DataGrid> 
</Grid> 
関連する問題