2016-09-15 17 views
0

私はの形式であるカスタムObservableDictionaryに結合するCollectionViewSourceていますWPFトリガーCollectionViewSourceの更新から別のプロパティの変更

public class Waypoint 
{ 
    public string Name { get; set; } 
    public float X { get; set; } 
    public float Y { get; set; } 
    public float Z { get; set; } 
} 

ObservableDictionary<int, List<Waypoint>> 

ウェイポイントのインスタンスは、の形式であります

同じビューモデル内で、私は別のプロパティ 'MapId'を持っています。これは、プレイヤーがマップ間を移動するにつれて更新されます。この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)); 
関連する問題