【发布时间】: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 然后它就起作用了。我需要阅读更多关于它的信息,因为它可以工作,但我不清楚所有人的行为和交互方式。谢谢大家