我有主從DataGrid
s,並且主站包含不同的客戶對象。當在主人中選擇特定的顧客時,那麼該孩子將顯示該顧客的訂單。 (每個客戶都有一個ObservableCollection<order>
訂單屬性。訂單有送貨ADRESS和數量。我用下面的XML如何防止停止應用程序的子/從Gridview驗證錯誤
<StackPanel DataContext="{StaticResource Customers1}" Orientation="Horizontal">
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False"
IsSynchronizedWithCurrentItem="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid ItemsSource="{Binding /orders}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Delivery Adress">
<DataGridTextColumn.Binding>
<Binding Path="deliveryAddress"></Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Quantity">
<DataGridTextColumn.Binding>
<Binding Path="quantity">
<Binding.ValidationRules>
<local:PositiveDoubleValidationRule></local:PositiveDoubleValidationRule>
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
交貨日期和數量都是可編輯的。我加了一個自定義的驗證規則,即保證了數量分析,以一個正的雙倍,否則導致一個驗證錯誤
這樣的工作,但是當我選擇另一個客戶(羅伯特),而當前客戶(馬克)的訂單仍然存在驗證錯誤,然後選擇客戶再次輸入錯誤(標記),應用程序停止工作(彈出窗口:[應用程序名稱]已停止工作)
當主設備爲ComboBox
時,該錯誤也會發生在其他情況下。然而,奇怪的是,當孩子是簡單的TextBox
時不會發生。
無論如何,我試圖想出解決方案,以解決這個問題,但到目前爲止,我沒有拿出一些體面的東西。什麼是好選擇?
編輯:我的訂單類實現如下:
class Order
{
public string deliveryAddress
{
get;
set;
}
public double quantity
{
get;
set;
}
public Order()
{
}
}
客戶是ObservableCollection<customer>
,並且每個客戶包含 ObservableCollection<Order>
類型的屬性訂單。
我試圖重現這一點,但它似乎在我的例子中工作。當使用驗證錯誤切換回客戶時,非法輸入已被替換爲原始值。 –
@PeterHansen這很奇怪。你使用什麼版本的.net/WPF?你的訂單對象如何實現? – willem
我已經嘗試在只安裝了.NET 4的計算機上運行應用程序,並可以看到它崩潰。在AddNew或Edit Item事務期間,不允許出現異常消息_'Defer Refresh'。發生這種情況的原因是,DataGrid在驗證錯誤時會停留在editmode中,並在返回視圖時嘗試刷新,這會導致異常。 .NET 4.5中已修復此錯誤。你可以谷歌錯誤消息,但似乎沒有完美的解決方法。也許你可以提示用戶修改驗證錯誤,然後再離開DataGrid或其他東西? –