này loại câu hỏi được hỏi nên thường xuyên và các câu trả lời nên tương tự tôi nghĩ thời gian của mình để có một câu trả lời duy nhất để tất cả (ok có thể "nhất") của bool cho những câu hỏi giá trị chuyển đổi. Tôi đã viết blog nó here.
Mã này là khá đơn giản vì vậy tôi sẽ dán nó ở đây quá: -
public class BoolToValueConverter<T> : IValueConverter
{
public T FalseValue { get; set; }
public T TrueValue { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return FalseValue;
else
return (bool)value ? TrueValue : FalseValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value != null ? value.Equals(TrueValue) : false;
}
}
Bây giờ bạn có thể tạo chuyển đổi để tầm nhìn với một lớp lót: -
public class BoolToVisibilityConverter : BoolToValueConverter<Visibility> { }
Sau đó cho bạn có thể tạo trình chuyển đổi thể hiện trong tài nguyên như sau: -
<local:BoolToVisibilityConverter x:Key="InverseVisibility" TrueValue="Collapsed" FalseValue="Visible" />
Lưu ý TrueValue
và FalseValue
được hoán đổi xung quanh từ thứ tự tự nhiên hơn cho bạn logic ngược mà bạn muốn. Với điều này trong Resources
trong UserControl
hoặc bạn thậm chí App.xaml bây giờ bạn có thể sử dụng nó để liên kết với CanDownload
tài sản để TextBox
Visibility
bất động sản: -
<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />
tuyệt vời. cảm ơn bạn đã trả lời. đó là những gì tôi đang tìm kiếm. – joblot
tôi đang gặp vấn đề lạ. khi tôi bước vào phương pháp chuyển đổi và di chuột qua targetType nó nói System.Windows.Visibility nhưng kiểm tra nếu (targetType là Visibility) không thành công. khi tôi làm targetType.GetType(). ToString() trong cửa sổ ngay lập tức nó trả về System.RuntimeType! tôi đang bối rối những gì đang xảy ra ở đây – joblot
đây là cách tôi đang ràng buộc – joblot