2009-04-17 6 views
0

Как связать два объекта TextBox с System.Windows.Sizestruct? Связывание только должен работать в этом направлении:Связать несколько текстовых полей с одной структурой в WPF

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

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

XAML:

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

C#:

private Size size 
{ 
    get; 
    set; 
} 

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

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

ответ

3

не могли бы вы просто выведите 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

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>