UserControl의 Dependency 속성에 내 ViewModel의 IsInInputMode
속성을 바인딩하려고합니다. 내 ViewModel의 인스턴스에 UserControl의 DataContext를 설정하고 모든 XAML 기반 바인딩이 올바르게 작동합니다. 이 바인딩을 만들려면 코드 숨김 솔루션이 필요합니다. 나는 일하지 않은 몇 가지 (게시물 하단에) 시도했습니다.UserControl 코드 종속성에서 UserControl의 Dependency 속성에 ViewModel을 바인딩하는 데 문제가 있습니다.
출력 창에 아무런 예외도 기록되지 않습니다. 여기에는 바인딩 기반 예외를 찾는 위치가 있습니다.
이 비슷한 question, XAML 통해 UserControl 종속성 속성 바인딩 - 나는 이것이 불가능한, 그래서 코드 숨김 솔루션을 찾고 있어요 물었다.
는 뷰 모델은 다음과 같습니다
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을 통해 버튼의 명령에 바인딩되는 데이터입니다.
는 해당 UserControl의 종속성 속성은 다음과 같습니다 : 내 UserControl을의 생성자에 바인딩
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 속성이 변경되면 종속성 속성이 업데이트되지 않고 두 개의 짝수 핸들러가 호출되지 않습니다. 그래서 DataContext를 올바르게 바인딩 알 -
은 추가 참고로, 뷰 모델은 이가 성공적으로 XAML을 통해 해당 UserControl에서 버튼에 바인드되고있는 몇 ICommand
특성을 가지고 있습니다.
어떤 종류의 오류를 찾아야합니까? "vshost.XXXX가 코드 0 (0x0)으로 종료되었습니다." – Nate
아니요, 실제로는 괜찮습니다. 거기에 "데이터 예외"가 보이십니까? –
아니, 예외는 아예 없습니다. 어셈블리 및 종료 코드로드에 대한 다양한 정보 (모두 0x0). – Nate