gpt4 book ai didi

wpf - 多绑定(bind)时观察集合不更新

转载 作者:行者123 更新时间:2023-12-04 14:19:22 26 4
gpt4 key购买 nike

我在 ViewModel 中有一个静态的 ObservableCollection MarketList 和它以下列方式绑定(bind)到 Table:

<FlowDocumentScrollViewer Height="216" VerticalAlignment="Top" Margin="-7,2,7,0" >
<FlowDocument>
<Table CellSpacing="0" Name="MBPTable" >
<Table.DataContext>
<MultiBinding UpdateSourceTrigger="Explicit" Mode="TwoWay" Converter="{StaticResource indexerConverter}">
<Binding Path="MarketList" UpdateSourceTrigger="PropertyChanged" NotifyOnSourceUpdated="True" Mode="TwoWay" BindsDirectlyToSource="True" />
<Binding Path="MBPindex" Mode="TwoWay" />
</MultiBinding>
</Table.DataContext>
<Table.Resources>
<local:IndexerConverter x:Key="indexerConverter"></local:IndexerConverter>
</Table.Resources>

Table 包含绑定(bind)到 MarketList 属性的 ListView

<ListView  Name="MarketByPriceList" Width="300" ItemsSource="{Binding MarketByPriceList, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" AlternationCount="2" Margin="0,15,0,0" >
<ListView.View>
<GridView>
<GridViewColumn Header="Orders" Width="48" DisplayMemberBinding="{Binding MBP_NoofBuy_Orders, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ></GridViewColumn>
<GridViewColumn Header="Bid Qty" Width="48" DisplayMemberBinding="{Binding MBPBID_Qty, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" ></GridViewColumn>
</GridView>
</ListView.View>
</ListView>

这是转换器方法

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values != null && values[0] != DependencyProperty.UnsetValue)
{
// ObservableCollection<GlobalItems.Model.MarketWatchModel> allNames = (ObservableCollection<GlobalItems.Model.MarketWatchModel>)values[0];
int index = (int)values[1];

return GlobalItems.ViewModel.MarketWatchModelView.MarketList[index];
}
else
{
return null;
}
}

绑定(bind)工作正常,但集合中的更新未反射(reflect)在 UI 中

最佳答案

这似乎归结为描述的相同问题 here ,本质上是 same solution应该可以。

更新(添加或删除)ObservableCollection 不会导致您的 MultiBinding 刷新,因为 MultiBinding 正在监听 PropertyChanged 事件并且更新 ObservableCollection 只会触发 CollectionChanged 事件。一个干净的解决方法是将 Binding 添加到 MultiBinding 中 ObservableCollection 的 Count 属性。例如

<MultiBinding  UpdateSourceTrigger="Explicit"  Mode="TwoWay" Converter="{StaticResource indexerConverter}">
<Binding Path="MarketList" UpdateSourceTrigger="PropertyChanged" NotifyOnSourceUpdated="True" Mode="TwoWay" BindsDirectlyToSource="True" />
<Binding Path="MBPindex" Mode="TwoWay" />
<Binding Path="MarketList.Count" /> <!-- Additional Binding causes refresh when MarketList is updated -->
</MultiBinding>

在所有现有绑定(bind)之后添加附加绑定(bind),以便 MultiValueConverter 可以忽略额外的值。当您的 ObservableCollection 的 Count 属性更改时(当您添加或删除项目时),它将触发 PropertyChanged 事件并且您的 MultiBinding 将刷新。

关于wpf - 多绑定(bind)时观察集合不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18072503/

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