Привязать несколько TextBox к одной структуре в WPF - PullRequest
0 голосов
/ 17 апреля 2009

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

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

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

XAML:

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

C #:

private Size size
{
  get;
  set;
}

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

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

Ответы [ 2 ]

3 голосов
/ 18 апреля 2009

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

Например, ваша модель может быть чем-то вроде;

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

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

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

Tony

0 голосов
/ 17 апреля 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...