2009-04-01 8 views
0

私はWPFを使用しており、コントロールのDependencyPropertiesにバインドするデータクラスを持っています。私は実行時にユーザーの制御下でバインディングを変更する必要があります。理想的には私が動作しない文字列を取るコースGetDependencyPropertyこの実行時にバインドするDependencyPropertyの変更

myControl.SetBinding(UserControl.GetDependencyProperty("HeightProperty") 
    , myBinding); 

ような何かを行うことができるようにしたいのですが、私は自分の静的クラス作成することによってこの問題を回避持って

 public static DependencyProperty GetDP(string Name) 
     { 
      switch (Name) 
      { 
       case "Height": return UserControl.HeightProperty; 
       case "Width": return UserControl.WidthProperty; 
.... 
      } 

より良い方法がありますか?

答えて

1

ユーザーがターゲット依存プロパティーを変更する方法を説明していません。 stringではなく、DependencyProperty自体を保存できますか?そうすれば、コンバージョンを全く行う必要はありません。擬似コード:コメント後

//just an array of all allowable properties 
public DependencyProperty[] AllowedProperties { get; } 

//the property the user has chosen 
public DependencyProperty ChosenProperty { get; set; } 

//called whenever ChosenProperty changes 
private void OnChosenPropertyChanged() 
{ 
    //redo binding here, using ChosenProperty as the target 
} 

編集:様々なため

var descriptor = DepedencyPropertyDescriptor.FromName(nameFromExcel, typeof(YourUserControl), typeof(YourUserControl)); 
var dependencyProperty = descriptor.DependencyProperty; 
+0

ユーザー:あなたは、所有者の種類を知っていると仮定すると、その名前からしたDependencyPropertyを取得するためにDependencyPropertyDescriptor.FromNameを使用することができます理由はExcelからこれを駆動するため、Excelセルの内容を文字列に変換する必要があります。 AllowedPropertiesのアイデアが気に入っていますが、ChosenPropertyで問題が発生します。 – MrTelly

+0

私は参照してください。私はそれに応じて自分の投稿を更新しました。 –

+0

それはまさに私が後にしたことです - 歓声。 BTWあなたのresizerコードは、しばらく前に穴から私を助けました - ありがとう – MrTelly

関連する問題