2016-04-05 11 views
1

私の目標は、WPFプロジェクトのRadGridViewのセルの背景色を、基になるデータの値のものにすることです。しかし、このデータは動的ですので、あらかじめ定義されたテンプレートを使用することはできません。WPF:コード内のテンプレートのバインディングを変更する

私の基になるテーブルにはRGB値がありますが(コンマではなくスペースを使用していますので、これを修正するためにコンバータを使用します) 「色」欄及びテンプレートシングル、すべてが御馳走を働いた:

<Window.Resources> 

    <local:StringToBrushConverter x:Key="lStringToBrushConverter"></local:StringToBrushConverter> 

    <DataTemplate x:Key="ColourCellTemplate"> 
     <Border Name="lBorder" BorderThickness="3" Margin="1" CornerRadius="1" Width="100" 
       BorderBrush="{Binding Colour, Converter={StaticResource lStringToBrushConverter}}"> 
      <TextBlock Background="{Binding ElementName=lBorder, Path=BorderBrush}" ></TextBlock> 
     </Border> 
    </DataTemplate> 

</Window.Resources> 

問題は、私は、ダイナミックなシナリオで使用できるように、このテンプレートを扱うことができますどのようになりました。

BorderBrush="{Binding Colour, Converter={StaticResource lStringToBrushConverter}}" 

が、私はそれがコードビハインドで達成することができるかわからない:基本的に私は変更する必要があるのはこの部分で「カラー」です。私はTryFindResourceを使用してDataTemplateを保持することができますが、バインドを変更する次のステップは私が立ち往生した場所です。

Telerikの例はthisです。値が別の値と比較されているにもかかわらず、私の問題は解決されません。

感謝..

+0

なぜCellTemplateSelectorが役に立たないのですか?それはあなたが必要とするものとまったく同じように、データ項目に基づいてテンプレートを選択することができます。 – Evk

+0

私は数百の行をすべて別の値にすることができました。私はそれぞれの事実に合わせてテンプレートを作成したくありません。それは私が持っていればうまくいくでしょう。赤、青、緑、または何かであるが、RGB値はカラーピッカーを使用してユーザによって選択される。 – miriyo

+0

あなたの問題は明確ではありません。 Colorプロパティで表される各行にRGB値があります。あなたが説明するようにColorにバインドできないのはなぜ、バインディングを変更するのか?それとも、違いは3つの列(R、G、B)が1つではないということですか? – Evk

答えて

0

私はコメントから正しく問題を理解していれば、あなただけの(色のように、ではないいくつかの特定のプロパティに)オブジェクト全体にバインドすることができますコンバータと、コンバータで、それは性質だ検査:

public class ColorColumnsConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
     if (value == null || value == DependencyProperty.UnsetValue) 
      return null; 
     var folder = value as Folder; // some of your data types 
     if (folder != null) { 
      return folder.ColorProperty; 
     } 
     var jpegFile = value as JpegFile; // some another of your data types 
     if (jpegFile != null) { 
      return jpegFile.Colour; 
     } 
     // etc 
     return null;    
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
} 
+0

こんにちは、テンプレート全体をDataRowにバインドするためのテンプレートを編集しました。デバッグ時に "RGB to Color converter"の値を調べると問題の行が表示されます。 私はあらかじめ定義されたテーブルを持っていないので、ある時点で問題のカラム名をテンプレートまたはコンバーターに伝える必要があります。 – miriyo

+0

ああ、あなたはDataRowを使用しています。さて、このDataRow.Table.Columnsの列を調べ、必要なものを見つけて、DataRowから値を抽出してください。 – Evk

+0

私はまだどの列がコンバータを使用しているのか分からないという問題があります。私は確かに値としてDataRowオブジェクトを持っていますが、パラメータを使用してフィールド名を渡す方法が必要です – miriyo

関連する問題