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
C# 装订不';不响应属性更改_C#_Wpf_Data Binding_Mvvm - Fatal编程技术网

C# 装订不';不响应属性更改

C# 装订不';不响应属性更改,c#,wpf,data-binding,mvvm,C#,Wpf,Data Binding,Mvvm,我有一个窗口模型和一个视图模型,我被视图困住了。 该视图有一个包含以下内容的控件: <TextBlock Text="{Binding Title}" [...] /> 数据上下文是视图模型,它具有类型为string的Title属性 问题是,即使值发生更改(我可以通过调试器看到它发生了更改),并且为标题调用了属性更改,文本块也不会更改(它保持为空) 为了证实这一点,我实际上在每次按下鼠标时都调用了更新方法 我听说有时候TextBlocks中的绑定被窃听了,所以我也尝试了一个标签

我有一个窗口模型和一个视图模型,我被视图困住了。
该视图有一个包含以下内容的控件:

<TextBlock Text="{Binding Title}" [...] />

数据上下文是视图模型,它具有类型为string的
Title
属性

问题是,即使值发生更改(我可以通过调试器看到它发生了更改),并且为
标题
调用了
属性更改
文本块
也不会更改(它保持为空)

为了证实这一点,我实际上在每次按下鼠标时都调用了更新方法

我听说有时候
TextBlock
s中的绑定被窃听了,所以我也尝试了一个标签,但它不起作用。有什么建议吗?如果有任何代码你想看到,请告诉我在评论(整个事情是相当大的)



更清楚地说:
窗口
是我的模型,而不是WPF的窗口

请将属性名称(在您的案例中为“Title”)传递给OnPropertyChanged方法。

您的窗口。Title是string.Empty。给它赋值。像

public WindowViewModel()
{
    Window = new Window(){Title="abc"};
}
更新我尝试了你的代码,但它对我不起作用。我做了一次更改,它成功了。更改是

public WindowEntryView()
{
    DataContext = new WindowViewModel();
    InitializeComponent();
}

如果您实例化
WindowViewModel
类,它将起作用

代码隐藏:

public partial class WindowEntryView
{
    public static readonly DependencyProperty WindowViewModelProperty;
    public WindowViewModel WindowViewModel
    {
        get { return (WindowViewModel)GetValue(WindowViewModelProperty); }
        set
        {
            SetValue(WindowViewModelProperty, value);
            value.Refresh(); // I've putted this out of desperation to see if it would help.. it didn't.
        }
    }

    static WindowEntryView()
    {
        PropertyMetadata metadata = new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender); // Another attempt with no success.
        WindowViewModelProperty = DependencyProperty.Register("WindowViewModel", typeof(WindowViewModel), typeof(WindowEntryView), metadata);
    }

    public WindowEntryView()
    {
        //WindowViewModel = new WindowViewModel(19860522); This is the only attempt that made the label show something, but it didn't update later of course.

        InitializeComponent();

        WindowViewModel = new WpfApplication3.WindowViewModel() { Title = "Check" };
        DataContext = WindowViewModel;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        WindowViewModel.Title = DateTime.Now.ToString();
    }
}
XAML:



您确定没有绑定错误吗?您是否检查了
输出
窗口?@AnandMurali是的,我总是检查。您能显示标题代码属性吗?@NahumLitvin我在底部添加了一个到ViewModel的链接。XAML在顶部(它实际上是所有的东西)。不,它不是。你本可以破坏datacontext。(你的cs很好)尝试了,但没有成功。虽然这并不奇怪,因为
Refresh
有这个代码。我不能。Title的setter需要一个实际的窗口句柄才能运行。它更多的是一个方法,而不是一个变量(没有私有字段)。此外,这会有什么帮助?在代码
WindowViewModel中,
没有实例化对吗?或者我遗漏了什么。是的,你是对的(我一直在玩这么多来修复它)。但即使我修复了它,它仍然没有更新。@Ken您能返回get{return“abc”;}而不是get{return\u window.Title;}来验证您的绑定是否正确吗correct@ethicallogics哦,我明白你的意思了。装订工作,但只有一次。我知道这一点,因为如果没有句柄,模型将返回一个特定的字符串。这个问题正是标题所说的。。它不响应任何PropertyChanged通知。因此,我创建了视图,它向我显示了“无句柄”字符串。然后设置句柄,但它仍然显示“无句柄”。请仔细查看源代码。“他试图以一种复杂的方式做到这一点。”阿南穆拉里问我的XAML为什么?请更具体一点。我已经更新了答案,包括我的样本XAML。它对我来说很好,所以我想你可能在XAML中犯了一个错误。@AnandMurali哦,我以前也试过类似的方法。这将是第一次工作,但不会更新。如果要更新,请单击
按钮
并进行检查。
TextBlock
将使用当前时间更新。
<Grid>
    <TextBlock Text="{Binding Title}" VerticalAlignment="Top"/>
    <Button Content="Button" HorizontalAlignment="Left" Margin="116,131,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>
</Grid>