Привязать несколько текстовых полей к одной структуре в WPF

Как связать два объекта TextBox с System.Windows.Size структура? Привязка должна работать только в этом направлении:

(textBox1.Text + textBox2.Text) => (Размер)

После того, как пользователь вставит ширину и высоту в текстовые поля пользовательского интерфейса, должен быть создан объект Size.

XAML:

<TextBox Name="textBox_Width" Text="{Binding ???}" />
<TextBox Name="textBox_Height" Text="{Binding ???}" />

C#:

private Size size
{
  get;
  set;
}

Есть простой способ сделать это?

Изменить: Размер — это структура! Поэтому "someObject.Size.Width = 123" не работает. Мне нужно вызвать Size-Constructor и установить someObject.Size = newSize


person Nick    schedule 17.04.2009    source источник


Ответы (2)


Не могли бы вы просто указать 2 свойства - ширину и высоту из вашей модели вместе со свойством размера. Ширина и высота появятся в ваших выражениях {Binding}, а затем, когда вы захотите получить свойство размера, оно инициализируется на основе этих двух полей.

Например, ваша модель может выглядеть примерно так:

public class MyModel
{
    public int Width{ get; set; }
    public int Height{ get; set; }

    public Size Size{ get{ return new Size( Width, Height ); }}
};

Надеюсь это поможет.

Тони

person deepcode.co.uk    schedule 17.04.2009

Window1.xaml.cs:

public partial class Window1 : Window
{
    public static readonly DependencyProperty SizeProperty = DependencyProperty.Register("Size",
        typeof(Size),
        typeof(Window1));

    public Size Size
    {
        get { return (Size)GetValue(SizeProperty); }
        set { SetValue(SizeProperty, value); }
    }

    public Window1()
    {
        InitializeComponent();
        DataContext = this;
        _button.Click += new RoutedEventHandler(_button_Click);
    }

    void _button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(Size.ToString());
    }
}

Window1.xaml:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel>
        <TextBox Text="{Binding Size.Width}"/>
        <TextBox Text="{Binding Size.Height}"/>
        <Button x:Name="_button">Show Size</Button>
    </StackPanel>
</Window>
person Kent Boogaart    schedule 17.04.2009