2013-02-06 159 views
1

有人可以告诉我这个源代码有什么问题吗? 当我点击按钮它不更新ist值? 起初绑定转换器使他的工作。WPF绑定不更新按钮内容

源代码很大,所以我只会发布一些片段。

XAML: 实例是的ObservableCollection的类型

<ListBox Name="Instances"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Button Tag="{Binding Path=Instance.Name}" Content="{Binding Path=Instance.Active, Converter={StaticResource BTSC}}" Click="ChangeAccess"/> 
      <TextBlock Text="{Binding Path=Instance.Name}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

转换器:

public class BoolToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (((Boolean)value) == true) 
      return "No"; 
     else 
      return "Yes"; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

事件:

private void ChangeAccess(object sender, RoutedEventArgs e) 
{ 
    for... 
    if ((sender as Button).Tag.ToString() == (DP.Instances[i].Instance as CInstance).Name) 
    { 
     SkipIfAndElse... 
     DP.Instances[i].Instance.Active = true; 
    } 
} 

CInstance:

class CInstance : INotifyPropertyChanged 
{ 
    private Boolean active; 
    public Boolean Active 
    { 
     get { return active; } 
     set 
     { 
      active = value; 
      NotifyPropertyChanged("Access"); 
     } 
    } 
} 

CInstance类的所有其他值都按预期更新。

回答

2

在你CInstance类

NotifyPropertyChanged("Access"); 

应该

NotifyPropertyChanged("Active"); 
+0

我的天啊,非常感谢。我在这里坐了几个小时,每次都要监督这个小虫子。对不起,垃圾发布 –

1

我建议你开始使用某种INPC框架。我个人喜欢Simon Cropp的Fody。 Fody将相应的OnNotifyPropertyChanged作为后期编译步骤添加,这意味着您无法获得使用基于Expression的解决方案获得的Runtime命中。

在一天结束时,基于OnNotifyPropertyChanged的字符串都很脆弱。