我試圖將我的ViewModel的IsInInputMode
屬性綁定到UserControl中的依賴屬性。我將UserControl的DataContext設置爲ViewModel的一個實例,並且所有基於XAML的綁定都能正常工作。我需要一個代碼隱藏解決方案來創建這個綁定。我已經嘗試了一些沒有工作的東西(在帖子的底部)。數據綁定到用戶控件的UserControl的依賴屬性的ViewModel的問題 - 背後
我沒有收到記錄到輸出窗口的任何異常,這是我被告知尋找基於綁定的異常的地方。
我問過類似的question,通過XAML綁定UserControl中的Dependency Property - 我被告知這是不可能的,所以我正在尋找一個代碼隱藏解決方案。
視圖模型看起來像這樣:
class AddClientViewModel : ViewModelBase
{
private Boolean _isInInputMode;
public Boolean IsInInputMode
{
get { return _isInInputMode; }
set
{
_isInInputMode = value;
OnPropertyChanged("IsInInputMode");
}
}
public ICommand Cancel
{
get { return new RelayCommand(parm => { IsInInputMode = false; }); }
}
}
的Cancel
命令成功是通過XAML綁定到一個按鈕的命令是數據。
依賴屬性的用戶控件看起來像這樣:
public bool IsInInputMode
{
get { return (bool)GetValue(IsInInputModeProperty); }
set { SetValue(IsInInputModeProperty, value); }
}
public static readonly DependencyProperty IsInInputModeProperty =
DependencyProperty.Register("IsInInputMode", typeof(bool), typeof(AddClientView), new UIPropertyMetadata(new PropertyChangedCallback(_OnIsInInputModePropertyChanged)));
private static void _OnIsInInputModePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var mycontrol = d as AddClientView;
bool oldValue = (bool)e.OldValue;
bool newValue = (bool)e.NewValue;
if (null != mycontrol && oldValue != newValue)
{
mycontrol._OnIsInInputModeChanged(oldValue, newValue);
}
}
private void _OnIsInInputModeChanged(bool oldValue, bool newValue)
{
if (newValue)
{
VisualStateManager.GoToState(this, "InputState", false);
}
else
{
VisualStateManager.GoToState(this, "HiddenState", false);
}
}
在我的用戶的構造函數的綁定已經有了幾個迭代。
的第一次嘗試:
public AddClientView()
{
InitializeComponent();
SetBinding(IsInInputModeProperty, "IsInInputMode");
}
第二次嘗試:
public AddClientView()
{
InitializeComponent();
var b = new Binding();
b.Source = this.DataContext;
b.Path = new PropertyPath("IsInInputMode");
b.Mode = BindingMode.TwoWay;
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(this, IsInInputModeProperty, b);
}
這些都不 「失敗」 與編譯器或運行時錯誤;但是當ViewModel中的IsInInputMode屬性發生更改時,依賴屬性永遠不會更新,並且兩個偶數處理程序都不會被調用。
作爲附加的註釋,視圖模型有幾個ICommand
屬性,是正在通過XAML成功綁定到按鈕的用戶控件 - 所以我知道DataContext的正確結合。
什麼類型我應該尋找錯誤嗎?我看到很多「vshost.XXXX退出代碼0(0x0)」。 – Nate 2011-03-03 20:21:50
不,這其實沒關係。你有沒有看到任何「數據例外」? – 2011-03-03 22:05:20
不,沒有任何例外。只是有關加載程序集和退出代碼的所有信息,全部爲0x0。 – Nate 2011-03-03 23:27:14