【问题标题】:C# wpf wont refresh using array bindingC# wpf 不会使用数组绑定刷新
【发布时间】:2020-12-10 17:19:27
【问题描述】:

我在 wpf 上有一个简单的 Ellispis,我将它绑定到一个数组项“Data[0]”以对其进行动画处理。 问题是当我将它绑定到该数组时,它的值切换“真/假”对 UI 没有影响。

但是当我将绑定更改为同一类中的另一个公共 bool 时。没问题

<Ellipse Width="19"
Height="18"
Margin="29,137,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Fill="{Binding Data[0], 
    Converter={StaticResource BooleanToBrushConverter}, 
    Mode=OneWay,
    UpdateSourceTrigger=PropertyChanged}"
Stroke="Black" />

当我绑定到该数组时,UI 上没有更新:

    public bool[] Data
    {
        get{ return _data; }
        set{ _data= value; }
    }
    private bool[] _data= new Boolean[20];

当我绑定到该布尔值时,它正在工作:

    public bool DataSimple
    {
        get { return _dataSimple; }
        set { _dataSimple=value; }
    }
    private bool _dataSimple;

这用于刷新它所达到的值和控件,并且在调试中都显示出良好的结果:

    private void RefreshData(object sender, EventArgs e)
    {
        _data= _process.DataRes;
        _dataSimple= _process.DataRes[0];
        Debug.WriteLine(_data[0]);
        Debug.WriteLine(_dataSimple);
    }

有人可以帮我解决这个问题吗? 谢谢

【问题讨论】:

  • 在我看来这是因为您绑定到 bool 数组索引 0,而不是绑定到 bool 数组本身(它具有 getter/setter)。尝试创建一个 BooleanArrayToBrushConverter,在其中只获取第一个元素并返回其 Brush。然后,将绑定更改为 `Fill="{BInding Data, Converter={StaticResource BooleanArrayToBrushConverter},"。我也对没有 INotifyPropertyChanged 的​​情况下如何工作感到困惑,但我离题了。
  • 切换我的意思是“值=非值”从“真到假”或“假到真”切换。我是 C# 的新手。但是有了你的所有评论,我做到了。我没有使用数组,而是使用了 ObservableCollection,我将它绑定到了一个客户类,并添加了 INotifyPropertyChanged 然后它就起作用了。我需要阅读更多关于它的信息,因为它可以工作,但我不清楚所有人的行为和交互方式。谢谢大家

标签: c# wpf binding


【解决方案1】:

您的问题不清楚您正在更改什么以及期望触发用户界面的更新。

如果您要更新单个布尔值,请将 bool[] 替换为 ObservableCollection&lt;bool&gt; 并使用适当数量的项目对其进行初始化。

如果您要提供一个全新的 bool 值数组,那么您的类需要为更新的属性实现 INotifyPropertyChanged

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多