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>