Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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
C# 数据绑定问题_C#_Xaml_Windows Phone 8 - Fatal编程技术网

C# 数据绑定问题

C# 数据绑定问题,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,我在将数据从TextBox绑定到ViewModel再绑定到TextBlock时遇到了一个主要问题。我设置了以下Xaml代码,如下所示: <Page x:Class="digiBottle.MainPage" DataContext="{Binding Source=UserProfile}" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.

我在将数据从TextBox绑定到ViewModel再绑定到TextBlock时遇到了一个主要问题。我设置了以下Xaml代码,如下所示:

<Page
x:Class="digiBottle.MainPage"
DataContext="{Binding Source=UserProfile}"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:digiBottle"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
      DataContext="{Binding Source=UserProfile}">

    <TextBlock HorizontalAlignment="Left" Margin="219,72,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="32" Width="232" Text="{Binding userFirstName, Mode=OneWay}"/>
    <TextBox HorizontalAlignment="Left" Margin="39,72,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="111" Text="{Binding userFirstName, UpdateSourceTrigger=PropertyChanged}"/>

</Grid>
{ 公共类UserProfile:INotifyPropertyChanged {

    public int ID { get; set; }
    public string userFirstName;
    public string userLastName { get; set; }
    public int age { get; set; }
    public int weight { get; set; }
    public int height { get; set; }
    public DateTime signupTime { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    public UserProfile()
    {
        userFirstName = "First Name";
    }


    private void RaisePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

    }

    public UserProfile getCopy()
    {
        UserProfile copy = (UserProfile)this.MemberwiseClone();
        return copy;
        }
    }
}
在UserProfile.cs源文件中将我的TextBox和TextBlock绑定到userFirstName时,我做错了什么。任何帮助都将是主要帮助


谢谢

我注意到的第一件事是您的属性(setter)没有引发事件更改。您需要在属性setter中调用RaisePropertyChanged

我会像这样写的

私人场地

private String _userFirstName;
然后在构造函数中

 public UserProfile()
 {
      this._userFirstName = "First Name";
 }
与财产筹集活动

public String UserFirstName
{
     get { return this._userFirstName; }
     set  
     {
         this._userFirstName = value;
         this.RaisePropertyChanged("UserFirstName");
     }
}
然后在XAML中,通过双向绑定将其与属性“UserFirstName”绑定

<TextBlock HorizontalAlignment="Left" Margin="219,72,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="32" Width="232" Text="{Binding UserFirstName, Mode=OneWay}"/>
<TextBox HorizontalAlignment="Left" Margin="39,72,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="111" Text="{Binding UserFirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

开始时,数据绑定可能很难理解。请参阅开始

对于您的代码:以下是您需要的修复程序:

  • 请记住,您只能绑定到属性
  • 您需要在集合操作上引发事件
  • 根据需要的操作,您可能需要对文本框进行双向绑定
  • 您需要为textbox和textblock设置DataContext
  • 以下是变化:

    CS

    XAML

    
    
    这是Windows Phone的问题还是Windows 8的问题?这个答案也可以。:b两个很棒的建议。谢谢大家!哇,非常感谢你们,准备用这段代码试驾。它将解决我所有的问题!!!!你们太棒了!
    <TextBlock HorizontalAlignment="Left" Margin="219,72,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="32" Width="232" Text="{Binding UserFirstName, Mode=OneWay}"/>
    <TextBox HorizontalAlignment="Left" Margin="39,72,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="111" Text="{Binding UserFirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    
    public class UserProfile : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
    
        string user_first_name;
        public String UserFirstName
        {
            get { return user_first_name; }
            set
            {
                user_first_name = value;
                OnPropertyChanged("UserFirstName");
            }
        }
    
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    
    }
    
    
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
    
            UserProfile up = new UserProfile();
            this.tb1.DataContext = up;
            this.tb2.DataContext = up;
        }
     }
    
    <TextBlock x:Name="tb2" TextWrapping="Wrap" Text="{Binding UserFirstName}"/>
    <TextBox x:Name="tb1" HorizontalAlignment="Left" Height="72" Margin="14,475,0,0" Grid.Row="1" TextWrapping="Wrap" Text="{Binding UserFirstName, Mode=TwoWay}" VerticalAlignment="Top" Width="456" />