我有一个CollectionViewSource,它绑定到一个自定义ObservableDictionary,其格式为:
ObservableDictionary<int, List<Waypoint>>
航点实例的格式为:
public class Waypoint
{
public string Name { get; set; }
public float X { get; set; }
public float Y { get; set; }
public float Z { get; set; }
}
在同一个视图模型中,我有另一个属性&#39; MapId&#39;随着玩家在地图之间移动而更新。我试图将此ObservableDictionary实例绑定到ListBox,以仅显示基于其mapid的给定地图的路线图。 (字典的int是地图ID。)
有没有办法让CollectionViewSource根据正在更新的另一个属性绑定强制刷新?
我试图在XAML中尽可能少地使用代码进行此操作。
以下是我目前的一些内容。
在我看来:
<CollectionViewSource x:Key="WaypointCollection" Filter="WaypointCollection_OnFilter" Source="{Binding Waypoints, Source={StaticResource Configurations}}"
/>
在我看来代码隐藏(过滤器):
private void WaypointCollection_OnFilter(object sender, FilterEventArgs e)
{
var main = SimpleIoc.Default.GetInstance<MainViewModel>();
if (main == null)
{
e.Accepted = false;
return;
}
var waypoint = (KeyValuePair<int, List<Waypoint>>)e.Item;
var zone = main.Player.ZoneId;
e.Accepted = waypoint.Key == zone;
}
答案 0 :(得分:0)
你无法绑定。因为它们不是DependencyObject
(DO)。但是如果这个another property
是DO / DP。然后,您可以使用Refresh方法强制刷新。您可以指定一个回调,以便在注册DP时收到有关此DP的任何更改的通知。
... , new PropertyMetadata(new PropertyChangedCallback(MyCallback));
答案 1 :(得分:0)
我使用创建服务来处理根据需要通过异步任务加载的东西。尽管不是我最初想要的方法,但仍可按需要工作。