gpt4 book ai didi

WPF UI 未在属性更改时更新

转载 作者:行者123 更新时间:2023-12-04 12:24:57 27 4
gpt4 key购买 nike

我不确定我在这里做错了什么......

我有一个自定义 HashTable,它有一种方法可以让某人从 HashTable 中删除“partNumber”(一个值)。

删除方法如下:

class COSC202HashTable : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

//....
private List<int> underlyingList;
//...
public List<int> HashList { get { return underlyingList; } }

public void Delete(int partNumber)
{
string theAlgoritnm = Algorithm;
if (String.Compare(theAlgoritnm, "Modulo Division") == 0 && String.Compare(Probe, "Linear Collision Resolution") == 0)
{
LinearModularDivision(partNumber, false);
}
if (String.Compare(theAlgoritnm, "Modulo Division") == 0 && String.Compare(Probe, "Key Offset Collision Resolution") == 0)
{
KeyOffsetModularDivision(partNumber, false);
}
if (String.Compare(theAlgoritnm, "Pseudorandom") == 0)
{
Pseudorandom(partNumber, false);
}
if (String.Compare(theAlgoritnm, "Rotation") == 0)
{
Rotation(partNumber, false);
}

NotifyPropertyChanged("HashList");
}
//.......
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}

我将 HashTable 的基础值绑定(bind)到 UI;但是,删除值后 UI 不会更新。我确保拼写等没有问题......

这是我的 WPF UI 的标记:
<Window.Resources>
<COSC202:COSC202HashTable x:Name="TheHashTable" x:Key="TheHashTable" PropertyChanged="TheHashTable_PropertyChanged"></COSC202:COSC202HashTable>
</Window.Resources>
<ListView x:Name="HashResults" Height="32" Width="1200" Margin="10" HorizontalAlignment="Right"
DataContext="{Binding Source={StaticResource TheHashTable}}" ItemsSource="{Binding Path=HashList}" HorizontalContentAlignment="Left">
<ListView.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,2">
<GradientStop Color="#FF000000" Offset="0"></GradientStop>
<GradientStop Color="DarkBlue" Offset="1"></GradientStop>
</LinearGradientBrush>
</ListView.Background>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>

<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=.}" FontSize="11" Foreground="Azure" VerticalAlignment="Top" ></TextBlock>
<Label Content="|" VerticalAlignment="Top" FontSize="5"></Label>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

这是我在单击按钮时调用以删除 HashTable 中的项目的代码:
  private void DeleteItem_Click(object sender, RoutedEventArgs e)
{
Object item = HashResults.SelectedItem;
COSC202HashTable theHashTable = (COSC202HashTable)this.Resources["TheHashTable"];
if (theHashTable != null && item != null)
{
theHashTable.Delete((int)item);
}
HashResults.SelectedIndex = -1;

}

我究竟做错了什么?

谢谢,

-弗林尼

最佳答案

在“输出”窗口中查找绑定(bind)错误的第一个位置,这通常会为您指明正确的方向。

如果您要绑定(bind)到自定义集合,那么您可能需要实现 INotifyCollectionChanged .或者考虑将您的数据源更改为 ObservableCollection,或者在您的情况下,您可能需要 ObservableDictionary .

您还提到了拼写错误,有几种方法可以确保这不是问题,请查看 MVVM Foundation的基础 ObservableObject

您的代码缺少一些细节,例如您对 StaticResource TheHashTable 的声明。

编辑:
如果您需要 UI 来查看列表中的更改将列表类型更改为 ObservableCollection 或创建新属性,则针对 List 类引发 PropertyChanged 不会通知该列表中的更改:

public ObservableCollection Hash
{
get
{
return new ObservableCollection(this.HashList);
}
}

并绑定(bind)到 Hash 属性。

关于WPF UI 未在属性更改时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4007218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com