除了 BradleyDotNet 的答案之外,另一种 WPF 方法是使用触发器。这将纯粹基于 XAML,无需转换器代码。
XAML:
<Label>
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsAuthenticated}" Value="True">
<Setter Property="Content" Value="Authenticated" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
BradledDotNet 提到的规则适用,应附加 ViewModel,并且“IsAuthenticated”属性应引发 PropertyChanged 事件。
-- 按照 Gayot Fow 的建议添加一些样板代码 --
查看背后代码:
为简单起见,我将在后面的代码中设置视图的 DataContext。为了获得更好的设计,您可以使用 ViewModelLocator,如下所述here https://stackoverflow.com/questions/5462040/what-is-a-viewmodellocator-and-what-are-its-pros-cons-compared-to-datatemplates.
public partial class SampleWindow : Window
{
SampleModel _model = new SampleModel();
public SampleWindow() {
InitializeComponent();
DataContext = _model; // attach the model/viewmodel to DataContext for binding in XAML
}
}
模型示例(它实际上应该是ViewModel):
这里的要点是附加的模型/视图模型必须实现 INotifyPropertyChanged。
public class SampleModel : INotifyPropertyChanged
{
bool _isAuthenticated = false;
public bool IsAuthenticated {
get { return _isAuthenticated; }
set {
if (_isAuthenticated != value) {
_isAuthenticated = value;
OnPropertyChanged("IsAuthenticated"); // raising this event is key to have binding working properly
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string propName) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}