Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何将属性绑定到文本块/文本框?_Wpf_Mvvm - Fatal编程技术网

Wpf 如何将属性绑定到文本块/文本框?

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> 当我运行上面的程序时,我没

这是我的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>

当我运行上面的程序时,我没有得到任何绑定到我的文本块的东西。请发表您宝贵的建议 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?