2016-09-19 13 views
-2

私は、カスタムテキストボックスにテキストを作成するxamlの色を決定するC#コードの目的で初めてバインドしようとしています。データトリガーとバインドが機能しません

私のC#コード:

だから、
public class Limits 
{ 
public static bool fruitLimits(string textboxDec, ComboBox boxVariable) 
{ 
    if (string.IsNullorWhiteSpace(textboxDec) 
    {return false;} 
    else if (boxVariable.SelectedIndex == 1) 
    { 
     try 
     { int apples = Convert.ToInt32(textboxDex); 
      if (apples < 4 && apples != 0) 
      {return false;} 
      else if(apples > 50) 
      {return false;} 
      else 
      return true; 
     } 
     catch (FormatException fEx) 
     {return false;} 
     } 
     else 
     { 
      try 
      { int oranges = Convert.ToInt32(textboxDec); 
      if (oranges < 1 && oranges != 0) 
      { 
      return false;} 
      else if (oranges > 100) 
      {return false;} 
      else 
      return true; 
      } 
      catch (FormatException fEx2) 
      {return false;} 
     } 
    } 

このメソッドがtrueを返したときに、今、私はXAMLにこの方法をバインドしたいので、ボックス内のテキストは、それがfalseを返したときに、テキストは赤、黒です。

<local:DigitBox x:Name="FruitNumber"> 
    <local:DigitBox.Style> 
    <Style TargetType="local:DigitBox"> 
    <Style.Triggers> 
    <DataTrigger 
    Binding="{Binding Limits.fruitLimits}" Value="False"> 
    <Setter Property="Foreground" Value="Red"/> 
    </DataTrigger> 
    </Style.Triggers> 
    </Style> 
    </local:DigitBox.Style> 
    </local:DigitBox> 

エラーは見つかりませんが、カスタムテキストボックスの色は変わりません。私は自分の色の変更を直接私のC#の方法で設定しようとしたが動作します。しかし、私はxamlの視覚的な変化を維持している私が読んできたことを維持しようとしています。これはバインドする必要がありますが、私は明らかに重要でないものを見落としている/理解していません

+0

は、時にはそれはそれを使用しようとしている*前*技術の本質についての本や記事を読むために便利です。 WPFデータバインディングについては、MSDNの[データバインディングの概要](https://msdn.microsoft.com/en-us/library/ms752347(v = vs.110).aspx)の記事を読むことをお勧めします理解。 – Clemens

答えて

1

問題はプロパティの代わりにメソッドにバインドしようとしていることです。 このような何かを試してみてください:

public static bool fruitLimits 
{ 
    get 
    { /*your method code here*/ } 
} 

EDIT: プロパティに引数を渡す方法はありませんので、あなたは、テキストボックスの値へのアクセスを持っていない場合は、コンバータを記述する必要があり、そのこれらの値が渡されます。ここでは基本:link 値として1つのオブジェクトを渡し、もう1つをパラメータとして渡すことができます。 コンバータは情報を処理し、boolを返します。 ここでは、このコンバータの結合がどのように見えるかの例:ここでは

例を、あなたの結合は次のようになります。

   <DataTrigger Value="True"> 
        <DataTrigger.Binding> 
         <MultiBinding Converter="{StaticResource converterKey}"> 
          <Binding ElementName="boxVariable" /> 
          <Binding ElementName="textboxDec" Path="Text" /> 
         </MultiBinding> 
        </DataTrigger.Binding> 

は「のElementName = boxVariable」を交換し、「のElementName = textboxDec "あなたが渡したいコントロールの名前を入力してください。テキストボックスバインディングに "Path = Text"を追加する必要があります。

はその後IMultiValueConverterにこのような何か:

public object Convert(object[] value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    if (value[0].GetType().Equals(typeof(ComboBox)) && value[1].GetType().Equals(typeof(String))) 
    { 
     ComboBox boxVariable = value[0] as ComboBox; 
     string textboxDec = value[1] as String; 

     /* your method code here, returns Boolean */ 
    } 
} 
+0

ありがとう今私はそれを試してみます – JohnChris

+0

コンバータの例を教えてください。 - 私のメソッドfruitLimitsの結果を使用しますか?そして、それはどのようにプロパティに渡されるのですか? – JohnChris

+0

こんにちはR.jauch、継続的な助けをいただきありがとうございます。DataTriggerのために、 'バインディング'タイプの 'ConverterParameter'プロパティでA'Binding 'を設定することはできません。 'Binding'はDependencyObjectのDependecyPropertyでのみ設定できます – JohnChris

関連する問題