使用布尔值绑定文本块的可见性不起作用
Bind Visibility of Textblock with Boolean not working
我正在编写一个 Windows Phone 8.1 (WINRT) 应用程序。我使用 ListView 来填充项目:
XAML:
xmlns:ConvertersFile="using:DrFit.Converters"
<Page.Resources>
<ConvertersFile:BoolToVisConverter x:Key="BooleanToVisibilityConverter"/>
</Page.Resources>
<ListView x:Name="EquipmentListView" DataContext="{Binding}" SelectionChanged="EquipmentListView_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding EquipmentDetails}"
x:Name="EquipmentDetails"
Visibility="{Binding Path=ShowHide, Converter={StaticResource BooleanToVisibilityConverter}}"/>>
</TextBlock>
</Grid>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
C# Class 对于 ListView:
class EquipmentClassTemporary
{
public string EquipmentTitle { get; set; }
public string EquipmentDetails { get; set; }
public bool ShowHide { get; set; }
}
C#:
ObservableCollection<EquipmentClassTemporary> EquipmentListViewList = new ObservableCollection<EquipmentClassTemporary>();
private void GenerateEquipmentListView()
{
for(int i=0; i< SingletonInstance.strHeading.Length;i++)
{
EquipmentListViewList.Add(new EquipmentClassTemporary { EquipmentTitle = SingletonInstance.strHeading[i], EquipmentDetails = SingletonInstance.strEquipment[i], ShowHide=false });
}
EquipmentListView.ItemsSource = EquipmentListViewList;
}
private void EquipmentListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
var ClickedItem = e.AddedItems[0];
((EquipmentClassTemporary)ClickedItem).ShowHide = true;
}
if (e.RemovedItems.Count > 0)
{
var UnClickedItem = e.RemovedItems[0];
((EquipmentClassTemporary)UnClickedItem).ShowHide = false;
}
}
BoolToVisConverter:
public class BoolToVisConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
try
{
if ((bool)value)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
catch
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
try
{
if ((bool)value)
{
return Visibility.Visible;
}
}
catch { }
return Visibility.Collapsed;
}
}
EquipmentDetails 文本块的可见性未更改。?
您需要添加以下代码来实现INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
然后从 属性 setter 中调用 OnPropertyChanged,例如
private bool showHide;
public bool ShowHide
{
get { return showHide; }
set { showHide = value;
OnPropertyChanged("ShowHide"); }
}
注册 propertyChanged 事件处理程序后,您可以使用其中的许多属性 class。不需要单独的 "OnPropertyChanged" 函数。
public bool ShowHide
{
get { return showHide; }
set { showHide = value;
OnPropertyChanged("ShowHide"); }
}
public int newProperty
{
get { return _newProperty; }
set { _newProperty = value;
OnPropertyChanged("newProperty"); }
}
public string NewStringProp
{
get { return _NewStringProp; }
set { _NewStringProp = value;
OnPropertyChanged("NewStringProp"); }
}
等等...
我正在编写一个 Windows Phone 8.1 (WINRT) 应用程序。我使用 ListView 来填充项目:
XAML:
xmlns:ConvertersFile="using:DrFit.Converters"
<Page.Resources>
<ConvertersFile:BoolToVisConverter x:Key="BooleanToVisibilityConverter"/>
</Page.Resources>
<ListView x:Name="EquipmentListView" DataContext="{Binding}" SelectionChanged="EquipmentListView_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding EquipmentDetails}"
x:Name="EquipmentDetails"
Visibility="{Binding Path=ShowHide, Converter={StaticResource BooleanToVisibilityConverter}}"/>>
</TextBlock>
</Grid>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
C# Class 对于 ListView:
class EquipmentClassTemporary
{
public string EquipmentTitle { get; set; }
public string EquipmentDetails { get; set; }
public bool ShowHide { get; set; }
}
C#:
ObservableCollection<EquipmentClassTemporary> EquipmentListViewList = new ObservableCollection<EquipmentClassTemporary>();
private void GenerateEquipmentListView()
{
for(int i=0; i< SingletonInstance.strHeading.Length;i++)
{
EquipmentListViewList.Add(new EquipmentClassTemporary { EquipmentTitle = SingletonInstance.strHeading[i], EquipmentDetails = SingletonInstance.strEquipment[i], ShowHide=false });
}
EquipmentListView.ItemsSource = EquipmentListViewList;
}
private void EquipmentListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
var ClickedItem = e.AddedItems[0];
((EquipmentClassTemporary)ClickedItem).ShowHide = true;
}
if (e.RemovedItems.Count > 0)
{
var UnClickedItem = e.RemovedItems[0];
((EquipmentClassTemporary)UnClickedItem).ShowHide = false;
}
}
BoolToVisConverter:
public class BoolToVisConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
try
{
if ((bool)value)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
catch
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
try
{
if ((bool)value)
{
return Visibility.Visible;
}
}
catch { }
return Visibility.Collapsed;
}
}
EquipmentDetails 文本块的可见性未更改。?
您需要添加以下代码来实现INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
然后从 属性 setter 中调用 OnPropertyChanged,例如
private bool showHide;
public bool ShowHide
{
get { return showHide; }
set { showHide = value;
OnPropertyChanged("ShowHide"); }
}
注册 propertyChanged 事件处理程序后,您可以使用其中的许多属性 class。不需要单独的 "OnPropertyChanged" 函数。
public bool ShowHide
{
get { return showHide; }
set { showHide = value;
OnPropertyChanged("ShowHide"); }
}
public int newProperty
{
get { return _newProperty; }
set { _newProperty = value;
OnPropertyChanged("newProperty"); }
}
public string NewStringProp
{
get { return _NewStringProp; }
set { _NewStringProp = value;
OnPropertyChanged("NewStringProp"); }
}
等等...