簡體   English   中英

如何將數據綁定到控件的Visibility屬性

[英]How to bind data to a control's Visibility property

我知道控件的Visibility屬性不能像其他屬性一樣綁定到數據。 它需要某種轉換器(?)。 在嘗試從這個問題實現解決方案時,我遇到了一個編譯器錯誤: The resource "BoolToVisible" could not be resolved 我猜我必須創建一個名為BoolToVisibleResourceKey ,我只是不知道如何。

我要求有人告訴我綁定到控件的Visibility屬性的正確方法。

*我添加的控件是一個單選按鈕。 *我的數據模型中有一個isVisiblebool屬性,該屬性將綁定到此單選按鈕。

數據模型屬性:

private bool _isVisible = true;

public bool IsVisible
{
       get { return _isVisible; }
       set
       {
           _isVisible = value;
           NotifyPropertyChange(() => IsVisible);
       }
}

XAML:

<RadioButton Visibility="{Binding DataModel.IsVisible,Converter={StaticResource ResourceKey=BoolToVisible},RelativeSource={RelativeSource TemplatedParent}}" ... />

謝謝。

2個例子:

第一個使用像問題中所述的轉換器:

  public class BooleanToVisibilityConverter : IValueConverter 
  {
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     {            
         if (value == null || !(value is bool)) 
             return Binding.DoNothing;

         return (bool)value ? Visibility.Visible : Visibility.Collapsed; 
     }

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
     {
         return value;
     }
 }

在xaml中:

<Window x:Class="Stackoverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    xmlns:local="clr-namespace:Stackoverflow"
    >
<Window.Resources>
    <local:BooleanToVisibilityConverter x:Key="booleanToVisibiltyConverter"/>
</Window.Resources>

<Grid>
    <Button Visibility="{Binding IsSomeThing,Converter={StaticResource booleanToVisibiltyConverter}}"/>        
</Grid>

第二 :

在您的DataContext中,您可以保持一個可見性屬性

cs:

    private Visibility _myControlVisibility;
    public Visibility MyControlVisibility
    {
        get { return _myControlVisibility; }
        set { _myControlVisibility = value; }
    }

xaml:

    <Button Visibility="{Binding MyControlVisibility}"/>        

您可以使用屬性綁定可見性,只需要具有“可見性”的“依賴關系屬性”字段:

    Public Property MyVisibility As Windows.Visibility
    Get
        Return GetValue(MyVisibilityProperty)
    End Get

    Set(ByVal value As Windows.Visibility)
        SetValue(MyVisibilityProperty, value)
    End Set
End Property

Public Shared ReadOnly MyVisibilityProperty As DependencyProperty = _
                       DependencyProperty.Register("MyVisibility", _
                       GetType(Windows.Visibility), GetType(MyWindow), _
                       New PropertyMetadata(Nothing))

然后像往常一樣進行綁定(代碼在VB中)。

請記住,在New PropertyMetadata中,您可以為對象設置初始狀態,例如:

 Public Shared ReadOnly MyVisibilityProperty As DependencyProperty = _
                       DependencyProperty.Register("MyVisibility", _
                       GetType(Windows.Visibility), GetType(MyWindow), _
                       New PropertyMetadata(Windows.Visibility.Hidden))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM