0

私の目標は、1 つの Size プロパティを 2 つの異なるテキスト ボックスで更新することです。具体的には、以下の XAML で強調表示されている単一のテキスト ボックスに各コンポーネントが接続されています。具体的には次の行: {Binding Path=Dimensions.Width, ....}

private Size _dimension;
    public Size Dimensions
    {
        get { return _dimension; }
        set
        {
            _dimension = value;
            OnPropertyChanged("Dimensions");
        }
    }

私のXAMLは次のとおりです。

<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
   <Label Content="Width" />
   <TextBox Width="50" Text="{Binding Path=Dimensions.Width, 
            Converter={StaticResource myStringToDoubleConverter},
            UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
   <Label Content="Height" />
   <TextBox Width="50" Text="{Binding Path=Dimensions.Height,
            Converter={StaticResource myStringToDoubleConverter},
            UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StackPanel>

私が抱えている問題は、テキストボックス内のテキストを変更したときに set 関数が呼び出されないことです。その理由は、Size オブジェクトを提供していないためだと思いますが、せいぜい double、最悪の場合は文字列です。文字列を double に変換するコンバーターがそこにありますが、それはトリックではないようです。私の感覚では、Multibinding が解決策をもたらしますが、私が見たすべての例は、2 つの文字列を 3 番目のコントロールに結合するものです。値が追加されたコントロールを作成するのではなく、「複雑な」プロパティのコンポーネントを更新することに興味があります。

Height と Width の 2 つの「サブ」プロパティを作成し、Dimension プロパティを一度に 1 つずつ更新できることは理解していますが、より洗練されたソリューションが存在するはずです。

テキストボックスが Dimension プロパティの単一のコンポーネントに適切にバインドされず、それに応じてディメンションが更新されないのはなぜですか?

INotifyPropertyChanged を実装するラッパー クラスを構築するのは過剰に思えます。

public class MySizeClass : Size, INotifyPropertyChanged
4

2 に答える 2

1

これは、快適に完全に正常に機能するコンポーネント バインド ソリューションです。

    private Double m_Width;
    public Double Width
    {
        get { return (Dimensions.Width); }
        set
        {
            m_Width = value;
            Dimensions= new Size(m_Width, m_Height);
        }
    }
    private Double m_Height;
    public Double Height
    {
        get { return (Dimensions.Height); }
        set
        {
            m_Height = value;
            Dimensions= new Size(m_Width, m_Height);
        }
    }
    private Size _dimension;
    public Size Dimensions
    {
        get { return _dimension; }
        set
        {
            _dimension = value;
            OnPropertyChanged("Dimensions");
        }
    }

Dimensions.Width に直接バインドすることは、WPF でサポートされているようです。

于 2013-08-01T13:53:11.750 に答える