WPF绑定不会更新Button-Content

时间:2013-02-06 01:13:55

标签: c# wpf ivalueconverter

有人可能会告诉我这个源代码有什么问题吗? 当我点击按钮它没有更新ist值? 首先绑定转换器是他的工作。

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

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 个答案:

答案 0 :(得分:3)

在您的CInstance类

NotifyPropertyChanged("Access");

应该是

NotifyPropertyChanged("Active");

答案 1 :(得分:1)

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

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