WPF가 아닌 MVVM 응용 프로그램에서 수행중인 기본 기능을 사용하여 WPF MVVM 템플릿을 가져 오려고합니다. 이 경우 RowEditEnding 이벤트를 캡처하려고하는데, 변경된 행에있는 데이터의 유효성을 검사하기 위해 (나) 문제가 있습니다. 나는의 회원을 찾을 수있는 방법을 발견하지 않았습니다ICommand WPF ObservableCollection DataGrid에 바인딩
public ObservableCollection<Document> oDoc
{
get
{
return _oDoc;
}
}
public ICommand DocRowEdit
{
get { return new DelegateCommand(DocumentRowEditEvent); }
}
public void DocumentRowEditEvent()
{
//How do I find the changed item?
int i = 1;
}
: 핸들러에 완패에 위임 명령으로
<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch"
ItemsSource="{Binding oDoc.View}">
<DataGrid.Columns>
<DataGridTextColumn x:Name="docIDColumn" Binding="{Binding DocId}" Header="ID" Width="65"/>
<DataGridTextColumn x:Name="DocumentNumberColumn" Binding="{Binding Number}" Header="Document Number" Width="*"/>
<DataGridTextColumn x:Name="altIDColumn" Binding="{Binding AltID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Header="Alt" Width="55"/>
</DataGrid.Columns>
<i:Interaction.Triggers>
<i:EventTrigger EventName="RowEditEnding">
<i:InvokeCommandAction Command="{Binding DocRowEdit}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
:
XAML에서나는 이벤트 트리거를 사용했다 보류중인 변경 사항이있는 ObservableCollection (oDoc)입니다. DataGrid가 일부 유효성 검사를 수행하고 있음을 알 수 있습니다. 변경하려는 AltID 필드는 숫자가 아닌 값을 입력하면 빨간색으로 강조 표시됩니다. 그러나 검증을 처리하고 관련 메시지를 직접 처리하려고합니다. 내가 뭘 놓치고 있니? 어떻게 든 속성 변경 이벤트를 발생하기 위해 생각하지만,이 같은 배선하는 방법을 찾을 수 없습니다 :
protected void RaisePropertyChangedEvent(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
마지막 두 코드 블록 내 뷰 모델 클래스에서있다, 그리고 나는이 작업을 수행하기 위해 노력하고있어 MainWindow 생성자에서 ViewModel을 인스턴스화하는 것 외에 다른 코드를 사용하지 않아도됩니다.
당신은 당신의 ViewModel에 속성을 추가 할 수 있습니다
좋습니다. 이 바인딩은 매우 강력합니다. OnPropertyChanged에 비해, 나는 또한 그것을 구현했으며, 그것이 무엇을하는지 완전히 이해할 수 있을지 확신 할 수 없다. 단순히 이벤트를 발생시키는 것으로 보입니다.이 이벤트를 처리하려면 DataGrid의 XAML 블록에 다른 이벤트 트리거를 추가해야합니다. 그게 맞습니까? 아니면 핸들러에서 캡처하는 또 다른 방법이 있습니까? 나는 디버거에서 그것을 사용하고 내 OnPropertyChanged 함수가'handler (this, new PropertyChangedEventArgs (propertyName));'를 호출했지만 get을 사용하는 방법을 알지 못한다. –
동의합니다, 그것은 강력한 도구입니다! OnPropertyChanged 이벤트 (즉,'InotifyPropertyChanged' 인터페이스)를 사용하면 이벤트를 발생시키는 간단한 메커니즘이 아닙니다. 실제로 UI가 코드에 의해 수행 된 데이터 변경을 인식 할 수 있습니다. [여기] (https://msdn.microsoft.com/en-us/library/ms743695(v=vs.110) .aspx) 또는 [CodeProject] (http : //www.codeproject. com/Articles/29054/WPF-Data-Binding-Part)를 참조하십시오. –