Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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# C WPF数据绑定不工作_C#_Wpf_Xaml - Fatal编程技术网

C# C WPF数据绑定不工作

C# C WPF数据绑定不工作,c#,wpf,xaml,C#,Wpf,Xaml,我是c语言的新手,我正在尝试创建一个包含菜单和文本块的WPF窗口,但我的数据绑定都不起作用。 我在互联网上看到了几个页面和论坛,我看到人们总是在谈论设置DataContext,但我不知道为什么我的主窗口不被视为DataContext。我做错什么了吗?这是我的xaml: <Window x:Class="holdingseditor.MainWindow" <Grid> <TextBlock Height="30" Margin="0,24,0,0" Width="

我是c语言的新手,我正在尝试创建一个包含菜单和文本块的WPF窗口,但我的数据绑定都不起作用。 我在互联网上看到了几个页面和论坛,我看到人们总是在谈论设置DataContext,但我不知道为什么我的主窗口不被视为DataContext。我做错什么了吗?这是我的xaml:

<Window x:Class="holdingseditor.MainWindow"
<Grid>
    <TextBlock Height="30" Margin="0,24,0,0" Width="675" Text="{Binding DbRibbonText}" Background="{Binding DbRibbonColor}"/>
    <TextBlock Height="30" Margin="675,24,0,0" Width="472" Background="{Binding WfRibbonColor}" Text="{Binding WfRibbonText}"/>
    <Menu HorizontalAlignment="Left" Height="24" Margin="0,0,0,0" VerticalAlignment="Top" Width="1155">
        <MenuItem Header="_View">
            <MenuItem Header="Show _Archived Files History" Height="22" FontSize="12" Margin="0" Click="M_ShowArchivedFiles" IsEnabled="{Binding Path=DiesenameLoaded}"/>
        </MenuItem>

        <MenuItem Header="_Workflow">
            <MenuItem Header="O_utside Mode" Height="22" FontSize="12" Margin="0" IsCheckable="true" IsChecked="{Binding IsWfOutside}"/>
        </MenuItem>
    </Menu>
</Grid>    
</Window>

看起来不像是在设置DataContext

您必须告诉xaml在哪里查找其数据。您可能会在输出窗口中看到绑定表达式错误

在你的构造器里

this.DataContext=this

这将告诉您的xaml转到MainWindow.cs文件以查找绑定到的属性。我们这样做是为了当您开始学习MVVM时,可以将DataContext设置为viewmodel并停止使用隐藏的代码

下面是一个简单的例子:

在MainWindow.xaml中

<TextBlock Text="{Binding myTextProperty}"/>
请注意,我是在设置DataContext之前设置属性的。我是故意这么做的。您的xaml将只查找其属性值一次

如果希望在更改属性时更新,则需要实现InotifyPropertyChanged


您可以在这篇关于堆栈溢出的文章中阅读到它,它看起来不像是在设置DataContext

您必须告诉xaml在哪里查找其数据。您可能会在输出窗口中看到绑定表达式错误

在你的构造器里

this.DataContext=this

这将告诉您的xaml转到MainWindow.cs文件以查找绑定到的属性。我们这样做是为了当您开始学习MVVM时,可以将DataContext设置为viewmodel并停止使用隐藏的代码

下面是一个简单的例子:

在MainWindow.xaml中

<TextBlock Text="{Binding myTextProperty}"/>
请注意,我是在设置DataContext之前设置属性的。我是故意这么做的。您的xaml将只查找其属性值一次

如果希望在更改属性时更新,则需要实现InotifyPropertyChanged


您可以在这篇关于堆栈溢出的文章中阅读到,谢谢您的回答。在构造函数中设置DataContext最终会改变很多事情。它适用于我的菜单项绑定,但对于我在文本和背景上的两个TextBlock绑定中的绑定,它总是不起作用。同样对于属性更新,我认为它可以很好地工作,而不需要做其他事情。我觉得这没什么大不了的。老实说,对于一个使用C++开发的人来说,我觉得手动改变所有的东西都比较容易,而不是使用这些数据库。xaml需要SolidColorBrush。@pashashadkami是的,您必须确保将正确的类型传递到您试图绑定的内容中。您也可以使用转换器。也就是说,每一位开始学习数据绑定的工程师都说过,手工操作更容易。直到您真正了解了如何使用MVVM以及它的强大功能。那你就永远不会回头。谢谢你的回答。在构造函数中设置DataContext最终会改变很多事情。它适用于我的菜单项绑定,但对于我在文本和背景上的两个TextBlock绑定中的绑定,它总是不起作用。同样对于属性更新,我认为它可以很好地工作,而不需要做其他事情。我觉得这没什么大不了的。老实说,对于一个使用C++开发的人来说,我觉得手动改变所有的东西都比较容易,而不是使用这些数据库。xaml需要SolidColorBrush。@pashashadkami是的,您必须确保将正确的类型传递到您试图绑定的内容中。您也可以使用转换器。也就是说,每一位开始学习数据绑定的工程师都说过,手工操作更容易。直到您真正了解了如何使用MVVM以及它的强大功能。那你就永远不会回头。
public partial class MainWindow : Window{
      public String myTextProperty {get; set;}

      public MainWindow(){
          InitializeComponent();
          myTextPropety = "It works!";
          this.DataContext = this;
      }
}