如何在 wpf 中将对象从一个 window 绑定到另一个 window 中的另一个控件? (C#)
How to bind an object from one window to another control in another window in wpf? (c#)
我想将一个 window 中已经存在的对象绑定到另一个 windows 中的文本框。
我有这个对象(汽车)已经绑定到这个 window-
public partial class Car_UI : Window
{
BE.Car car = new BE.Car();//this is the object
public Car_UI()
{
InitializeComponent();
this.DataContext = car;
}
}
car 的一个字段是我想绑定到新 windw 的结构-我试过了,但它不起作用
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();
}
}
这是汽车类型
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>
出于某种原因,这不起作用,有人知道为什么吗?
感谢您的回答。
字段不能绑定,只能绑定属性。
您的 CarType
结构中的 属性 实际上是一个字段,而不是 属性,因此 WPF 绑定不会绑定到它。
您需要:
- 确保 TextBox 的 DataContext 是一个
CarType
对象
- 并且您使用适当的属性,而不是字段 - 最好还实现 INotifyPropertyChanged
从您的代码中我可以看到 Manufacturer 是在 Struct CarType 中定义的。
它不起作用的原因是
- Struct 是一个值类型,绑定将获得它的一个副本,因此永远不会更新原始对象。
我建议您将 CarType 更改为 class
我想将一个 window 中已经存在的对象绑定到另一个 windows 中的文本框。 我有这个对象(汽车)已经绑定到这个 window-
public partial class Car_UI : Window
{
BE.Car car = new BE.Car();//this is the object
public Car_UI()
{
InitializeComponent();
this.DataContext = car;
}
}
car 的一个字段是我想绑定到新 windw 的结构-我试过了,但它不起作用
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();
}
}
这是汽车类型
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>
出于某种原因,这不起作用,有人知道为什么吗?
感谢您的回答。 字段不能绑定,只能绑定属性。
您的 CarType
结构中的 属性 实际上是一个字段,而不是 属性,因此 WPF 绑定不会绑定到它。
您需要:
- 确保 TextBox 的 DataContext 是一个
CarType
对象 - 并且您使用适当的属性,而不是字段 - 最好还实现 INotifyPropertyChanged
从您的代码中我可以看到 Manufacturer 是在 Struct CarType 中定义的。 它不起作用的原因是
- Struct 是一个值类型,绑定将获得它的一个副本,因此永远不会更新原始对象。
我建议您将 CarType 更改为 class