如果你已经在视图模型中有你的 bool 变量,你有两件事要做:
使其成为一个属性,例如:
public bool vis { get; set; }
然后,您需要为您的财产使用可见性转换器:
这里描述:
http://social.msdn.microsoft.com/Forums/en/wpf/thread/3c0bef93-9daf-462f-b5da-b830cdee23d9
该示例假设您有一个视图模型并使用Binding
这是我从您的代码段中制作的一些演示代码:
视图模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace StackOverflowWpf2
{
public class BorderViewModel : INotifyPropertyChanged
{
private bool borderVisible = false;
public bool BorderVisible
{
get
{
return borderVisible;
}
set
{
borderVisible = value;
NotifyPropertyChanged("BorderVisible");
}
}
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
XAML:
<Window x:Class="StackOverflowWpf2.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">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
</Window.Resources>
<Grid>
<Border x:Name="Border1" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="21" Margin="229,164,0,0" VerticalAlignment="Top" Width="90" Opacity="0.5"
Visibility="{Binding Path=BorderVisible, Converter={StaticResource BoolToVisConverter} }" >
<Grid>
<Label Content="test"/>
</Grid>
</Border>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="381,35,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click"
/>
</Grid>
</Window>
一些 Codebehind 快速测试代码:(实际上是 MainWindow.xaml.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace StackOverflowWpf2
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public BorderViewModel ViewModel { get; set; }
public MainWindow()
{
InitializeComponent();
ViewModel = new BorderViewModel();
this.DataContext = ViewModel;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
var vis = (this.DataContext as BorderViewModel).BorderVisible;
(this.DataContext as BorderViewModel).BorderVisible = !vis;
}
}
}