あなたの質問は非常に広く、答えるのがやや難しいです。つまり、見たいVisibility
のはコントロールのプロパティです。
に設定Visibility
するCollapsed
と、UI は要素を表示しません。Visibility
必要に応じて、別の XAML 要素またはデータ要素の値に基づいて 設定できますが、変換を行うには IValueConverter を実装するクラスを実装する必要があります。
値コンバーターの中で最も一般的なものの 1 つは、「ブール値から可視性へ」のコンバーターです。インターネットで検索すると、これらの例を見つけることができます。そのアプローチをコピーして、「EmptyToVisibilityConverter」または「NullToVisibilityConverter」など、必要なものを作成できます。そのコンバーターを取得したら、可視性のバインディングで指定するだけです。例えば:
<Page.Resources>
<conv:NullToVisibilityConverter x:Key="NullToVis"/>
</Page.Resources>
<CheckBox ... Checked={Binding ThisBoxIsChecked}
Visibility={Binding SomeOtherValue,
Converter={StaticResource NullToVis}}"/>
コントロールのコンテンツと可視性プロパティの間のデータバインディングは同じである必要はないことに注意してください。コンテンツを 1 つの値にバインドし、可視性を別の値にバインドできます。
データバインディングを使用していない場合は、分離コードでこれらを設定する必要があります。しかし、なぜデータバインディングを使用しないのでしょうか?
編集:これは実際の例です。
これがあなたが探しているものではない場合、私は鈍感で質問を理解していません
空のプロジェクトを開始し、これをそれに投入し、少し遊んでセットアップ方法の感触をつかむことをお勧めします。XAML の学習曲線は比較的急勾配であり、必要なことを達成するには通常 2 つの方法がありますが、データ バインディングと INotifyPropertyChanged (この例では触れませんでした) の基本的な理解が本当に必要です。
C# コードは次のとおりです。
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace CheckboxList
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//Create a viewmodel and add some data to it.
var viewModel = new MyViewModel();
viewModel.Items.Add(new Data() {Name = "lol", Type = "lol", Selected = true});
viewModel.Items.Add(new Data() { Name = "lol", Type = "not_lol", Selected = true });
viewModel.Items.Add(new Data() { Name = "not_lol", Type = "not_lol", Selected = true });
//Set the window's datacontext to the ViewModel. This will make binding work.
this.DataContext = viewModel;
}
}
//This is the ViewModel used to bind your data
public class MyViewModel
{
//This could just be a List<Data> but ObservableCollection<T> will automatically
//update your UI when items are added or removed from the collection.
public ObservableCollection<Data> Items { get; set; }
public MyViewModel()
{
Items = new ObservableCollection<Data>();
}
}
//Just a sample class to hold the data for the grid.
//This is the class that is contained in the ObservableColleciton in the ViewModel
public class Data
{
public string Name { get; set; }
public string Type { get; set; }
public bool Selected { get; set; }
}
//This is an example converter. It looks to see if the element is set to "lol"
//If so, it returns Visibility.Collapsed. Otherwise, it returns Visibility.Visible.
public class LolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null && value is string)
{
var input = (string) value;
if (string.Equals(input, "lol", StringComparison.CurrentCultureIgnoreCase))
{
return Visibility.Collapsed;
}
else
{
return Visibility.Visible;
}
}
return Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
そしてXAML:
<Window x:Class="CheckboxList.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:CheckboxList="clr-namespace:CheckboxList"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<!-- Create an instance of LolToVisibilityConverter and call it "LolToVis" -->
<CheckboxList:LolToVisibilityConverter x:Key="LolToVis"/>
</Window.Resources>
<Grid>
<ListView ItemsSource="{Binding Items}"> <!--Bind the contents of the Items collection in our viewmodel -->
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}"/> <!-- bind this element to this column-->
<GridViewColumn Width="140" Header="Type" DisplayMemberBinding="{Binding Type}"/> <!-- bind this element to this column-->
<GridViewColumn Width="140" Header="Selected" > <!-- because we don't want this to just display true/false, we need to set up a template-->
<GridViewColumn.CellTemplate>
<DataTemplate>
<!-- we set the Visibility property to Name, and the converter to LolToVis-->
<!-- whenever this field will be displayed, it calls the converter to convert the string to a Visibility value-->
<!-- The visibility value is checked to determine whether or not the element should be displayed-->
<CheckBox IsChecked="{Binding Selected}" Visibility="{Binding Name, Converter={StaticResource LolToVis}}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>