2012-04-02 17 views
1

我有下面的XAML“画布”结合改变UI ......我想改变其知名度取决于属性更改。PropertyChanged事件不是使用转换器

XAML:

<d1:BooleanToVisibilityConverter x:Key="BoolToVis" /> 

Visibility="{Binding Path=IsVisible, Converter={StaticResource BoolToVis}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 

我在视图模型

private bool _isVisible; 
    public bool IsVisible 
    { 
     get { return _isVisible; } 
     set 
     { 
      _isVisible = value; 
      RaisePropertyChanged("IsVisible"); 
     } 
    } 

有此可见性属性这是我的转换代码:

class BooleanToVisibilityConverter : IValueConverter 
{ 
    public BooleanToVisibilityConverter() { } 
    #endregion 

    #region Properties 
    public bool Collapse { get; set; } 
    #endregion 

    #region IValueConverter Members 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     bool bValue = (bool)value; 
     if (bValue) 
     { 
      return Visibility.Visible; 
     } 
     else 
     { 
      return Visibility.Collapsed; 
      //if (Collapse) 
      // return Visibility.Collapsed; 
      //else 
      // return Visibility.Hidden; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //Visibility visibility = (Visibility)value; 

     //if (visibility == Visibility.Visible) 
     // return true; 
     //else 
     // return false; 
     return value; 
    } 
    #endregion 
} 

在调试我发现我的二传手被更改属性价值,但它不会在我的转换器上达到断点。在加载窗口时,转换器只会在最初被击中。之后,即使属性发生变化,它也不会被触发。

+1

是属性更改正确?也就是说,它是通过财产设定的,而不是直接针对现场?你没有向我们显示该代码。 – 2012-04-02 19:12:54

+0

我使用Prism PROPERT改变的事件, 命名空间Microsoft.Practices.Prism.ViewModel { [序列化] 公共抽象类NotificationObject:INotifyPropertyChanged的 { 保护NotificationObject(); 公共事件PropertyChangedEventHandler的PropertyChanged; 保护无效RaisePropertyChanged (表达式> propertyExpression); protected void RaisePropertyChanged(params string [] propertyNames); 保护虚拟无效RaisePropertyChanged(字符串propertyName); } – rajcool111 2012-04-02 19:35:57

+0

谢谢,但这不是我问的。我问你是如何更新IsVisible属性(是否不小心设置领域,而不是财产?) – 2012-04-02 19:39:57

回答

0

我读了您使用的棱镜所以要尽量改变你RaisePropertyChanged这种形式:

RaisePropertyChanged(() => IsVisible); 
+0

谢谢!我尝试过,但仍然没有看到UI上的任何更改。 – rajcool111 2012-04-02 22:48:05

+1

是否必须对我的视图模型做任何事情?上面的代码是子视图模型B..which作为观察的集合父视图模型A.最初我被调用B. – rajcool111 2012-04-02 22:50:24

+0

的新实例设置从属性所以,我认为有没有在部分错误您发布的代码。其他部分肯定有问题,但没有代码就不容易帮助你。也许你有一个绑定错误,但没有代码找不到它。您是否看到输出窗口中是否有建议? – pluka 2012-04-03 05:55:40

相关问题