Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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# 未能成功将我的ViewModel数据公开到我的视图以进行XAML绑定_C#_Wpf_Xaml_Mvvm_Binding - Fatal编程技术网

C# 未能成功将我的ViewModel数据公开到我的视图以进行XAML绑定

C# 未能成功将我的ViewModel数据公开到我的视图以进行XAML绑定,c#,wpf,xaml,mvvm,binding,C#,Wpf,Xaml,Mvvm,Binding,我正在构建一个Windows通用应用程序,并尝试将ViewModel中的数据公开到视图中,以便将其绑定到XAML元素。此时,我已经完全注释掉了我的所有代码,我只是编写了几行测试代码来尝试让它工作,这就是下面的示例中的内容。直接从视图绑定(如果我在视图中创建一个对象作为测试)确实有效 请帮助我理解我的错误所在,我想我已经阅读了互联网上的每一篇装订教程,但仍然不明白 查看(MainPage.xaml.cs): ViewModel(MainViewModel.cs): XAML(MainPage.XA

我正在构建一个Windows通用应用程序,并尝试将ViewModel中的数据公开到视图中,以便将其绑定到XAML元素。此时,我已经完全注释掉了我的所有代码,我只是编写了几行测试代码来尝试让它工作,这就是下面的示例中的内容。直接从视图绑定(如果我在视图中创建一个对象作为测试)确实有效

请帮助我理解我的错误所在,我想我已经阅读了互联网上的每一篇装订教程,但仍然不明白

查看(MainPage.xaml.cs):

ViewModel(MainViewModel.cs):

XAML(MainPage.XAML):


我读过关于这类错误的文章,虽然我对它想说什么有一些想法,但我不知道如何修复它。我是一个完全的编码初学者,尤其是C语言,所以请在回答时考虑到这一点:-)

只要尝试将它从字段更改为属性,它就会正常工作。不能绑定到字段。 编辑:

如果需要在viewmodel中添加更改通知视图,则需要实现INotifyPropertyChanged。 选中此答案,它将为属性更改提供一个示例

如果要将视图绑定到子特性,则根据情况有两个选项:

1-相对绑定:当您不从ViewModel中修改Term对象内部的属性时,使用此场景,即,它们将在ViewModel中初始化,并且可以在视图中修改,就像您所做的那样。请注意,需要绑定的任何内容都应该是属性,而不是字段

2-直接绑定到Viewmodel:当您在视图加载后从Viewmodel中修改术语对象内的属性时,将使用此场景。这样,您将需要为属性TermName和TermDescription向viewmodel添加属性

public string TermName{
    get{return NewTerm.Name;}
    set{NewTerm.Name = value;
        OnPropertyChanged("TermName");
    }//The same is applied for TermDescription

但是请注意,您需要删除Stackpanel对象上的绑定,因为您已经在Viewmodel中直接定义了属性。

只要尝试将其从字段更改为属性,它就会正常工作。不能绑定到字段。 编辑:

如果需要在viewmodel中添加更改通知视图,则需要实现INotifyPropertyChanged。 选中此答案,它将为属性更改提供一个示例

如果要将视图绑定到子特性,则根据情况有两个选项:

1-相对绑定:当您不从ViewModel中修改Term对象内部的属性时,使用此场景,即,它们将在ViewModel中初始化,并且可以在视图中修改,就像您所做的那样。请注意,需要绑定的任何内容都应该是属性,而不是字段

2-直接绑定到Viewmodel:当您在视图加载后从Viewmodel中修改术语对象内的属性时,将使用此场景。这样,您将需要为属性TermName和TermDescription向viewmodel添加属性

public string TermName{
    get{return NewTerm.Name;}
    set{NewTerm.Name = value;
        OnPropertyChanged("TermName");
    }//The same is applied for TermDescription

但是请注意,您需要删除Stackpanel对象上的绑定,因为您已经在Viewmodel中直接定义了属性。

只要尝试将其从字段更改为属性,它就会正常工作。不能绑定到字段。 编辑:

如果需要在viewmodel中添加更改通知视图,则需要实现INotifyPropertyChanged。 选中此答案,它将为属性更改提供一个示例

如果要将视图绑定到子特性,则根据情况有两个选项:

1-相对绑定:当您不从ViewModel中修改Term对象内部的属性时,使用此场景,即,它们将在ViewModel中初始化,并且可以在视图中修改,就像您所做的那样。请注意,需要绑定的任何内容都应该是属性,而不是字段

2-直接绑定到Viewmodel:当您在视图加载后从Viewmodel中修改术语对象内的属性时,将使用此场景。这样,您将需要为属性TermName和TermDescription向viewmodel添加属性

public string TermName{
    get{return NewTerm.Name;}
    set{NewTerm.Name = value;
        OnPropertyChanged("TermName");
    }//The same is applied for TermDescription

但是请注意,您需要删除Stackpanel对象上的绑定,因为您已经在Viewmodel中直接定义了属性。

只要尝试将其从字段更改为属性,它就会正常工作。不能绑定到字段。 编辑:

如果需要在viewmodel中添加更改通知视图,则需要实现INotifyPropertyChanged。 选中此答案,它将为属性更改提供一个示例

如果要将视图绑定到子特性,则根据情况有两个选项:

1-相对绑定:当您不从ViewModel中修改Term对象内部的属性时,使用此场景,即,它们将在ViewModel中初始化,并且可以在视图中修改,就像您所做的那样。请注意,需要绑定的任何内容都应该是属性,而不是字段

2-直接绑定到Viewmodel:当您在视图加载后从Viewmodel中修改术语对象内的属性时,将使用此场景。这样,您将需要为属性TermName和TermDescription向viewmodel添加属性

public string TermName{
    get{return NewTerm.Name;}
    set{NewTerm.Name = value;
        OnPropertyChanged("TermName");
    }//The same is applied for TermDescription

但是请注意,您需要删除Stackpanel对象上的绑定,因为您已经在Viewmodel中直接定义了属性。

请尝试以下操作:

<Page.Resources>
    <viewModels:MainViewModel x:Key="MainViewModel" />
</Page.Resources>

然后:

<StackPanel x:Name="mvvmStack" Orientation="Vertical">
            <TextBlock x:Name="mvvmTermName" Text="{Binding newTerm.TermName, Source={StaticResource MainViewModel}  FallbackValue='Fallingback'}" />
            <TextBlock x:Name="mvvmDescription" Text="{Binding newTerm.TermDescription, Source={StaticResource MainViewModel} FallbackValue='Fallingback', TargetNullValue='Unknown'}" /></StackPanel>


Of cource
newTerm
应该是具有INotifyChanged的属性

<Page.Resources>
    <viewModels:MainViewModel x:Key="MainViewModel" />
</Page.Resources>

然后:

<StackPanel x:Name="mvvmStack" Orientation="Vertical">
            <TextBlock x:Name="mvvmTermName" Text="{Binding newTerm.TermName, Source={StaticResource MainViewModel}  FallbackValue='Fallingback'}" />
            <TextBlock x:Name="mvvmDescription" Text="{Binding newTerm.TermDescription, Source={StaticResource MainViewModel} FallbackValue='Fallingback', TargetNullValue='Unknown'}" /></StackPanel>

新术语的定义