我目前正在努力與我想添加到我的WPF項目的綁定之一。 在應用程序中,我有一個不能用於數據綁定的bool屬性的模型。該屬性後面是一個.NET Remoting對象,它執行一些驗證並將新值寫入數據庫。綁定的價值變化直接存儲在數據庫中
需要確保屬性應顯示爲複選框,並且隨着用戶更改值,新值應立即提供給.NET遠程處理對象。
我到目前爲止的方法: 我在我的ViewModel中創建了一個綁定到我的複選框的DependencyProperty。 在DP的propertychanged處理程序中,我正在將值寫入遠程處理對象的屬性。
我對這種方法存在的問題: 如果.net遠程處理對象內的驗證引發異常,則會吞噬此異常。此外,複選框狀態和數據庫中的內容不同步。如果發生異常,我嘗試重置DP的值,但該複選框沒有反映出該值。 是什麼讓情況變得更糟?事實是,這個WPF控件被集成到了現有的WinForms應用程序中。 所以我想對這些異常具有相同的行爲,因爲我在Application.ThreadException處理程序中實現了這些行爲。
任何想法如何處理這個? 問題是,目前爲止我只聽說過.NET 4.0的解決方案,但我正在使用3.5SP1。
TIA 馬丁
簡短的演示代碼:
class TestVM : DependencyObject
{
private Model _m;
public TestVM()
{
_m = new Model();
}
public bool Value
{
get { return (bool)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
// Using a DependencyProperty as the backing store for Value. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value",
typeof(bool),
typeof(TestVM),
new FrameworkPropertyMetadata(
false,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
((sender, e) => ((TestVM)sender).Apply(e))));
private bool _suppress = false;
private void Apply(DependencyPropertyChangedEventArgs e)
{
if (_suppress) return;
try
{
_m.Value = this.Value;
}
catch
{
_suppress = true;
this.Value = _m.Value;
this.OnPropertyChanged(e);
}
finally
{
_suppress = false;
}
}
}
抱歉,但這不起作用,即使我得到異常,並在最後調用OnPropertyChanged,複選框並不反映未更新的值。 – 2010-06-24 15:01:53