모델보기
public class MyViewModel
{
public string MyProperty { get; set; }
}
XAML
<CheckBox IsChecked="{Binding !MyProperty.Equals('Steve')}" />
이것이 가능한가? 어떻게?
이러한 종류의 작업은 View Model의 논리를 포함하지 않고 Xaml에서 수행 할 수 있으며 많은 사람들 이 수행 해야 한다고 말합니다 . 작동하는지 보려면 다음과 같은 뷰 모델을 생성하십시오.
public class ViewModel : INotifyPropertyChanged
{
private string _myProperty;
public string MyProperty
{
[DebuggerStepThrough]
get { return _myProperty; }
[DebuggerStepThrough]
set
{
if (value != _myProperty)
{
_myProperty = value;
OnPropertyChanged("MyProperty");
}
}
}
#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string name)
{
var handler = System.Threading.Interlocked.CompareExchange(ref PropertyChanged, null, null);
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
#endregion
}
그런 다음 다음과 같은 일부 Xaml에 바인딩합니다.
<Grid>
<CheckBox Content="Some check box">
<CheckBox.Style>
<Style TargetType="CheckBox">
<Setter Property="IsChecked" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding MyProperty}" Value="Steve">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
</Grid>
이는 데이터 트리거로 스타일이 지정된 표준 WPF 확인란입니다. 트리거는 'MyProperty'속성에 "Steve"가 포함될 때마다 IsChecked 속성을 true로 설정합니다. 그렇지 않으면 CB는 선택 해제됩니다 (스타일의 재정의 Setter에 따라). 트리거가 VM의 'MyProperty'변경 사항을 수신하기 때문에 작동합니다. 따라서 시각화는 전적으로 사용자 표면으로 넘어갑니다.
트리거를 결합 (템플릿 선택기와 함께 사용)하여 WPF에 내장 된 강력한 기능에 액세스 할 수 있습니다. 배경색 등과 같은 확인란의 모든 종속성 속성에 바인딩됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다