이것은 내 첫 번째 게시물입니다. 질문을 게시하는 방법에 대한 조언을 환영합니다. SelectedItem이 변경 될 때 View Model에 알리기 위해 바운드 WPF Datagrid의 마지막 행을 얻으려면 어떻게해야합니까?
은 내가 속성이라고 OrderDetails의에 바인딩ItemsSource
을 가지고 WPF
DataGrid
(OrderDetails의 목록) 및
SelectedItem
이 CurrentOrderDetail라는 속성에 바인딩합니다.
CurrentOrderDetail 속성 내에서 계산을 수행하는 메서드를 호출합니다. 계산을 수행하는 메소드는 OrderDetails 등록 정보를 반복하고 해당 목록에 속한 각 OrderDetail의 두 구성원을 곱하여 총 비용을 산출합니다. 이 메서드는 텍스트 상자가 폼에 바인딩 된 다른 속성을 업데이트하기 만하면됩니다.
이 모든 것이 효과적입니다. DataGrid
의 마지막 행이 나올 때까지 좋습니다. 기본적으로 사용자는 첫 번째 행에서 시작하여 인보이스 필드를 클릭하고 수량을 입력 한 다음 Enter를 눌러 다음 행을 선택합니다. SelectedItem
이 변경되어 CurrentOrderDetail - calling calculate를 업데이트합니다. 이 작품! 사용자는 DataGrid
의 마지막 레코드가 히트 될 때까지 OK를 계산하는 모든 과정을 반복합니다. Invoiced 셀에서 편집을 마치려면 Enter 키를 누르면 calculate 메서드가 호출되지 않습니다. SelectedItem
은 변경되지 않았으므로 CurrentOrderDetail 속성은 절대로 업데이트되지 않습니다.
저는 WPF/Silverlight와 MVVM으로 최근에 옮겨온 표준을 좋아해요. 나는 뒤돌아 보지 않았습니다. 따라서이 앱을 같은 방식으로 유지하려고합니다.
나는 SelectedItem
을 바꾸기 위해 무언가를 강제 할 필요가 있다고 생각합니다. 보기에서 이벤트에 연결하고 단순히 탐색을 강요하는 방법에 대해 생각해 보았지만 조금 엉망이되었습니다. 더 나은 해결책이 있어야합니다. 나는 이틀이나 다른 포럼을 보냈으며 여러 아이디어를 시도해 보았습니다. 그 중 어떤 것도 작동하지 않았습니다.
속성 알림을 실행하기 위해 다른 행으로 이동하도록 사용자에게 요청할 수는 있지만, 그렇지 않을 수도 있습니다.
<DataGrid Name="grdData" Grid.Row="3" Grid.ColumnSpan="2" AutoGenerateColumns="False" CanUserAddRows="False" Margin="5,5,5,5" ItemsSource="{Binding Path=OrderDetails, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=CurrentOrderDetail, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BorderThickness="3" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Part}" Header="Wyandot Part #" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding Path=SupplierPartNumber}" Header="Supplier Part #" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding Path=UnitPrice, StringFormat=c}" Header="Price" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding Path=Account}" Header="Account" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding Path=UDF5, Mode=TwoWay}" Header="Invoiced" IsReadOnly="False" />
</DataGrid.Columns>
</DataGrid>
과 관련있는 내보기 모델의 조각 :
여기에 단지 DataGrid
에 대한 XAML입니다.
Private m_orderDetails As List(Of OrderDetail)
Public Property OrderDetails As List(Of OrderDetail)
Get
Return m_orderDetails
End Get
Set(value As List(Of OrderDetail))
m_orderDetails = value
InvokePropertyChanged("OrderDetails")
End Set
End Property
Private m_currentOrderDetail As OrderDetail
Public Property CurrentOrderDetail As OrderDetail
Get
Return m_currentOrderDetail
End Get
Set(value As OrderDetail)
m_currentOrderDetail = value
InvokePropertyChanged("CurrentOrderDetail")
Calculate()
End Set
End Property
Public Sub Calculate()
Dim total As Decimal = 0
For Each detail As OrderDetail In OrderDetails
total += detail.UnitPrice * detail.UDF5
Next
PoTotal = CStr("$" & total.ToString)
End Sub
IObservable 사용을 고려 했습니까? http://msdn.microsoft.com/en-us/library/dd990377.aspx –