如何将对象从一个窗口绑定到wpf中另一个窗口中的另一个控件? (C#)

时间:2015-01-11 08:50:14

标签: c# wpf data-binding

我想将一个窗口中已存在的对象绑定到另一个窗口中的文本框。 我有这个对象(汽车)已经绑定到这个窗口 -

public partial class Car_UI : Window
{
    BE.Car car = new BE.Car();//this is the object
public Car_UI()
    {
        InitializeComponent();
        this.DataContext = car;
    }
}

汽车的一个领域是我想要绑定到新风的结构 - 我试过这个但是它没有工作

 private void slc_ch_cartype(object sender, SelectionChangedEventArgs e)
    {
        ComboBoxItem lbi = ((sender as ComboBox).SelectedItem as ComboBoxItem);
        if ("other" == lbi.Content.ToString())
        {
            new carType_UI(){ DataContext =car.typecar/*this is the field in car I'm tring to bind*/}.Show();

        }
    }

这是cartype

 public struct CarType
{
    public string Manufacturer;
    public  string Model;
    public  int Volume;
    public override string ToString()
    {
        string s = String.Format(
          @"Manufacturer: {0} Model: {1} Volume: {2}"
           , Manufacturer, Model, Volume);
        return s;
    }
}

这是xaml中的绑定 -

<TextBox x:Name="txtbx_manf" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" >
        <TextBox.Text>
            <Binding Path="Manufacturer" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <local:StringRangeValidationRule MinimumLength="1" MaximumLength="50" ErrorMessage="Manufacturer is required to be at least 1 charecthers." />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

由于某种原因,这不起作用,有人知道为什么吗?

谢谢,答案。 字段不能绑定,只能绑定属性。

2 个答案:

答案 0 :(得分:2)

CarType结构中的属性实际上是一个字段,而不是属性,因此WPF绑定不会绑定到它。

你需要:

  • 确保TextBox的DataContext是CarType对象
  • 并且您使用适当的属性,而不是字段 - 最好也实现INotifyPropertyChanged

答案 1 :(得分:0)

从您的代码我可以看到制造商是在 Struct CarType中定义的。 它不工作的原因是

  • Struct是一种值类型,绑定将获取它的副本,因此永远不会更新原始对象。

我建议您将CarType更改为