【问题标题】:XAML databinding not updatingXAML 数据绑定未更新
【发布时间】:2012-11-07 12:18:06
【问题描述】:

只是需要一些数据绑定方面的帮助。

所以我有一个自定义对象的 ObservableCollection。对象的属性如图:

    /// <summary>
    /// Name
    /// </summary>
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                NotifyPropertyChanged("Name");
            }
        }
    }        

    /// <summary>
    /// Status
    /// </summary>
    private int _status;
    public int Status
    {
        get
        {
            return _status;
        }
        set
        {
            if (value != _status)
            {
                _status = value;
                NotifyPropertyChanged("Status");
            }
        }
    }

    /// <summary>
    /// Visible information
    /// </summary>
    private Visibility _visible;
    public Visibility Visible
    {
        get
        {
            return _visible;
        }
        set
        {
            if (value != _visible)
            {
                _visible = value;
                NotifyPropertyChanged("Visible");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(String propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (null != handler)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

基本上我有三个 TextBlock,其中前两个将 Text 绑定到 Name 和 Status,而第三个则有:

Visibility = {Binding Visible}

但是每当我想切换可见性属性时,我只能将其从可见状态切换到折叠状态,然后不能再切换。我的切换看起来像这样:

            ItemViewModel l = ((sender as LongListSelector).SelectedItem) as ItemViewModel;
            MessageBox.Show(l.Visible.ToString());
            if (l.Visible == Visibility.Collapsed)
                l.Visible = Visibility.Visible;
            else
                l.Visible = Visibility.Collapsed;

注意:ItemViewModel 是集合的自定义类,即。

ObservableCollection<ItemViewModel>

显然这只是一个粗略的测试,但仍然无法正常工作。无论项目的真实可见性状态如何,消息框始终显示“可见”。我怎样才能让它获得可见性的真实值?

如果有人有任何想法,那就太好了。

谢谢。

编辑:为清楚起见为文本块添加 XAML:

<TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="20"/>
<TextBlock Text="{Binding Status}" TextWrapping="Wrap" Margin="12,-6,280,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock x:Name="t1" Text="Test for visibility" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}" Visibility="{Binding Visible}"/>

请记住,这些文本块包含在堆栈面板和 longlistselector 中,因此只需更改 t1.Visible 是不可能的。

【问题讨论】:

  • 你能发布第三个文本框的整个 XAML 吗?
  • 添加到原始帖子中,以便更明显
  • 您的调试 msgbox 的行为是否符合您的预期?
  • 那么我是否正确理解您的财产始终保持Visible?所以问题[可能]在于您的属性没有改变,而不是绑定不起作用?
  • @Traw92 您是否在属性设置器中设置了断点以确保不会从其他代码中恢复有效?

标签: c# silverlight xaml binding


【解决方案1】:

经过更多调查,问题最终是该属性是由另一个代码分支设置的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多