Wpf 如何将属性绑定到文本块/文本框?
这是我的DemoModel.cs课程Wpf 如何将属性绑定到文本块/文本框?,wpf,mvvm,Wpf,Mvvm,这是我的DemoModel.cs课程 public int Age {get; set;} DemoViewModel.cs DemoViewModel() { DemoModel dm = new DemoModel(); dm.Age = 22; } 我的看法 <TextBlock FontSize="20" Text="{Binding Age,Mode=OneWay}"></TextBlock> 当我运行上面的程序时,我没
public int Age {get; set;}
DemoViewModel.cs
DemoViewModel()
{
DemoModel dm = new DemoModel();
dm.Age = 22;
}
我的看法
<TextBlock FontSize="20" Text="{Binding Age,Mode=OneWay}"></TextBlock>
当我运行上面的程序时,我没有得到任何绑定到我的文本块的东西。请发表您宝贵的建议
TIA试试这个。它应该会起作用。
您需要实现INotifyPropertyChanged
并引发PropertyChanged
事件,以通知视图您的属性已更改。
现在将Age
属性绑定到TextBlock
,它应该可以正常工作
public class DemoViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int age;
public int Age
{
get { return age; }
set
{
if (value != age)
{
age = value;
NotifyPropertyChanged("Age");
}
}
}
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
另外,请确保您的视图DataContext
设置为DemoViewModel
尝试此操作。它应该会起作用。
您需要实现INotifyPropertyChanged
并引发PropertyChanged
事件,以通知视图您的属性已更改。
现在将Age
属性绑定到TextBlock
,它应该可以正常工作
public class DemoViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int age;
public int Age
{
get { return age; }
set
{
if (value != age)
{
age = value;
NotifyPropertyChanged("Age");
}
}
}
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
还要确保视图DataContext
设置为视图中的DemoViewModel
在视图中指定DataContext
xmlns:local="clr-namespace:Demo.ViewModel"
xmlns:views="clr-namespace:Demo.View"
xmlns:viewModel="clr-namespace:Demo.ViewModel"
mc:Ignorable="d" Title="MainWindow"
Height="350" Width="525">
<window.DataContext>
<viewModel:DemoViewModel/>
</window.DataContext>
<grid>
<TextBlock FontSize="20" Text="{Binding Age,Mode=OneWay}"></TextBlock>
</grid>
模型中
public int Age {get; set;}
通常,这会解决你的问题。如果您正在使用,请尽量避免在视图后面编写代码。在我的示例中,在视图中设置xaml本身中的datacontext
在视图中指定DataContext
xmlns:local="clr-namespace:Demo.ViewModel"
xmlns:views="clr-namespace:Demo.View"
xmlns:viewModel="clr-namespace:Demo.ViewModel"
mc:Ignorable="d" Title="MainWindow"
Height="350" Width="525">
<window.DataContext>
<viewModel:DemoViewModel/>
</window.DataContext>
<grid>
<TextBlock FontSize="20" Text="{Binding Age,Mode=OneWay}"></TextBlock>
</grid>
模型中
public int Age {get; set;}
通常,这会解决你的问题。如果您正在使用,请尽量避免在视图后面编写代码。在我的示例中,在xaml本身中设置datacontext我重复了上面的步骤,但结果是一样的。。是的,我已将
DataContext
设置为DemoViewModel
<代码>公共部分类DemoView:UserControl{private DemoViewModel}U viewModel;公共DemoViewModel viewModel{get{return}viewModel;}set{U viewModel=value;}}}}公共DemoView(){InitializeComponent();ViewModel=new Demo.ViewModel.DemoViewModel();this.DataContext=ViewModel;}}确保视图模型类是公共的公共类DemoViewModel
。是的,它已经被设置为公共的。。我是否需要更改主窗口中的任何内容xmlns:local=“clr namespace:Demo.ViewModel”xmlns:views=“clr namespace:Demo.View”mc:Ignorable=“d”Title=“MainWindow”Height=“350”Width=“525”>
不,这已经足够了。您正在正确设置DataContext,它应该可以正常工作。我在你的代码中没有发现任何问题。只需在Constructor
中将一些测试值设置为Age
,然后放置断点并检查值是否已设置。我对上述内容感到厌倦,但结果相同。。是的,我已将DataContext
设置为DemoViewModel
<代码>公共部分类DemoView:UserControl{private DemoViewModel}U viewModel;公共DemoViewModel viewModel{get{return}viewModel;}set{U viewModel=value;}}}}公共DemoView(){InitializeComponent();ViewModel=new Demo.ViewModel.DemoViewModel();this.DataContext=ViewModel;}}确保视图模型类是公共的公共类DemoViewModel
。是的,它已经被设置为公共的。。我是否需要更改主窗口中的任何内容xmlns:local=“clr namespace:Demo.ViewModel”xmlns:views=“clr namespace:Demo.View”mc:Ignorable=“d”Title=“MainWindow”Height=“350”Width=“525”>
不,这已经足够了。您正在正确设置DataContext,它应该可以正常工作。我在你的代码中没有发现任何问题。只需将一些测试值设置为Constructor
中的Age
,然后放置断点并检查是否设置了该值。是否使用DemoViewModel对象设置视图的DataContext?是否使用DemoViewModel对象设置视图的DataContext?