我无法在mainwindow.xaml文本框中获取另一个classe的属性。在MainWindow.xaml中,我试图获取在mainwindow.xaml.cs.上定义的属性值。我成功获取了名称第一个文本框中ABC类的属性。详细信息如下:
MainWindow.xaml
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Name="UI">
<Grid DataContext="{Binding}">
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Vertical" Grid.Row="0">
<TextBox Text="{Binding Name1}"/>
</StackPanel>
<StackPanel Orientation="Vertical" Grid.Row="1">
<TextBox Text="{Binding class1.Name1}"/>
</StackPanel>
</Grid>
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window,INotifyPropertyChanged
{
Class1 c1 = new Class1();
public MainWindow()
{
InitializeComponent();
ABC win = new ABC();
win.Name1 =“主窗口”;
c1.Name =“1级”;
this.DataContext = win;
}
public class ABC
{
public string Name { get; set; }
}
public Class1 class1
{
get
{
return c1;
}
set
{
c1 = value;
INotifyChanged("class1");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void INotifyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(name));
}
}
}
的Class1.cs
public class Class1:INotifyPropertyChanged
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
NotifyPropertyChanged("Name");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
答案 0 :(得分:1)
Class1
它有一个名为Name
的属性,因此您的xaml必须为<TextBox Text="{Binding class1.Name}"/>
,而您似乎正在将DataContext
设置为嵌套类“为此,xaml不支持嵌套类。
您必须将ABC
添加为变量并将其作为嵌套类
示例:
的Xaml:
<Window x:Class="WpfApplication7.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Name="UI">
<Grid DataContext="{Binding ElementName=UI}">
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<!--You can't bind to a nested class-->
<!--<StackPanel Orientation="Vertical" Grid.Row="0">
<TextBox Text="{Binding Name1}"/>
</StackPanel>-->
<StackPanel Orientation="Vertical" Grid.Row="0">
<TextBox Text="{Binding ABCClass.Name1}"/>
</StackPanel>
<StackPanel Orientation="Vertical" Grid.Row="1">
<TextBox Text="{Binding class1.Name}"/>
</StackPanel>
</Grid>
</Window
代码:
public partial class MainWindow : Window, INotifyPropertyChanged
{
private Class1 c1 = new Class1();
private ABC _abcClass = new ABC();
public MainWindow()
{
InitializeComponent();
class1.Name = "Class 1";
_abcClass.Name1 = "ABC Class";
}
public ABC ABCClass
{
get { return _abcClass; }
set { _abcClass = value; INotifyChanged("ABCClass"); }
}
public Class1 class1
{
get { return c1; }
set { c1 = value; INotifyChanged("class1"); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void INotifyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
类
public class Class1 : NotifyBase
{
private string name;
public string Name
{
get { return name; }
set { name = value; NotifyPropertyChanged("Name"); }
}
}
public class ABC : NotifyBase
{
private string name;
public string Name1
{
get { return name; }
set { name = value; NotifyPropertyChanged("Name1"); }
}
}
public class NotifyBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
结果: