私の目標は、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