1

テキスト ボックスを持つユーザー コントロールがあります。UserControl に同じ名前の DependencyProperty を実装して、texbox の Text プロパティを公開しようとしました。したがって:

public static readonly DependencyProperty TextProperty =
   DependencyProperty.Register("Text",
                                typeof(string),
                                typeof(UserControlWithTextBox),
                                new UIPropertyMetadata(string.Empty));
    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set 
        {
            SetValue(TextProperty, value);
            textBox.Text = value;
        }
    }

私のアプリケーションでは get 部分が正常に動作しているようです。ただし、両方の UserControls の Text プロパティが空の文字列であるかどうかを確認するコンバーターを使用して、ボタンの IsEnabled プロパティをこれらの UserControls の 2 つの Text プロパティにバインドしようとしました。アプリケーション ウィンドウが読み込まれると、次のエラーが表示されます。

System.InvalidCastException は処理されませんでした Message="MS.Internal.NamedObject 型のオブジェクトを System.String 型に変換できません。"

Convert メソッドは次のようになります。

  public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return (string) values[0] != string.Empty &&
               (string) values[1] != string.Empty;
    }

値[0] と値[1] は両方とも、例外がスローされたときに値 DependencyProperty.UnsetValue を持ちます。

どこで間違ったのですか?

4

1 に答える 1

1

あなたの例外から判断すると、値[0]値[1] は文字列ではないため、明示的にキャストしようとすると壊れます。

これらのタイプを回避するには、TextBoxes をパブリック プロパティに実際にバインドしてから、ボタン IsEnabled を別のパブリック プロパティにバインドする必要があります。ゲッターでは、バインドされているプロパティをチェックして TextBoxes が空かどうかをチェックします。

于 2009-08-25T15:58:32.163 に答える