- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下类将作为绑定(bind)源:
public class Timeline : Canvas, INotifyPropertyChanged
{
public static readonly DependencyProperty TimeTextBindingPropProperty;
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public double TimeTextBindingProp
{
get { return (double)GetValue(TimeTextBindingPropProperty); }
set
{
SetValue(TimeTextBindingPropProperty, value);
OnPropertyChanged("TimeTextBindingProp");
}
}
static Timeline()
{
TimeTextBindingPropProperty = DependencyProperty.Register("TimeTextBindingProp", typeof(double), typeof(Timeline));
}
}
然后我在主窗口中设置文本框的 Text
属性和 timeline 的 TimeTextBindingProp
属性之间的绑定(bind):
private void InitTextBinding()
{
timeTextBinding = new Binding();
timeTextBinding.Mode = BindingMode.OneWay;
timeTextBinding.Source = timeline;
timeTextBinding.Path = new PropertyPath("TimeTextBindingProp");
timeTextBinding.Converter = new TimeTextConverter();
BindingOperations.SetBinding(this.timeTextBox, TextBox.TextProperty, timeTextBinding);
}
timeline
的
PropertyChanged
处理程序保持为空,即使在设置绑定(bind)并呈现 timeline
之后也是如此。我做错了什么?
编辑:
我在xaml中声明timeTextBox和timeline如下:
<StackPanel Orientation="Horizontal" Margin="0,10,0,5" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox Name="timeTextBox" Margin="0,0,20,0" VerticalAlignment="Center" HorizontalContentAlignment="Center" Height="20"
FontFamily="Tahoma" FontSize="14" BorderBrush="White" Background="White"/>
<Button Name="playButton" Style="{StaticResource buttonStyle}" Click="PlayButton_Click" Margin="0,0,5,0" HorizontalAlignment="Center"
VerticalAlignment="Center">
Play
</Button>
<Button Name="stopButton" Style="{StaticResource buttonStyle}" Click="StopButton_Click" Margin="0,0,20,0" HorizontalAlignment="Center"
VerticalAlignment="Center">
Stop
</Button>
<Slider Name="controlSlider" Height="Auto" Width="200" HorizontalAlignment="Center" VerticalAlignment="Center" IsEnabled="False">
<Slider.ToolTip>
<TextBlock Style="{StaticResource textStyleTextBlock}">Time Slider</TextBlock>
</Slider.ToolTip>
</Slider>
</StackPanel>
<ScrollViewer Name="scrollViewer" Margin="0,0,10,20" Height="500" HorizontalAlignment="Stretch" VerticalAlignment="Center" Focusable="False"
HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<StackPanel>
<UI:FittingCanvas x:Name="containerCanvas">
<timelinePanel:Timeline x:Name="timeline" TimeCursorEnabled="True" TimeMode="Minutes" Canvas.Left="0" Canvas.Top="0" Canvas.ZIndex="0" Visibility="Hidden"
CursorAnimBoundaryChanged="Timeline_CursorAnimBoundaryChanged" AnimationCompleted="Timeline_AnimationCompleted"/>
</UI:FittingCanvas>
<Canvas x:Name="waveFormCanvas" Height="80" Margin="0,10,0,0"/>
</StackPanel>
</ScrollViewer>
最佳答案
除了设置 timeTextBinding
之外,您的代码是否以任何其他方式更新 timeTextBox.Text
?也许您直接在代码隐藏中将 timeTextBox.Text 设置为某个值,或者您有一些其他绑定(bind)连接到它?
因为 timeTextBinding 只是OneWay,这样的更改不能写回 TimeTextBindingProp
,绑定(bind)将被简单地覆盖和删除(没有任何警告),并且 timeline.PropertyChanged
将重置为 null
。
关于c# - PropertyChangedEventHandler 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14266007/
我从 MVVM 开始。 我的应用程序使用这种“模式(PM 模式——我们不要在这里讨论这个:))”并且工作正常;该项目非常简单,据说对于初学者来说很容易掌握!如果只是... :) 有一件事让我感到困惑,
PropertyChangedEventHandler 是如何使用的?你能告诉我类的 Initalize 方法中的这段代码是做什么的吗?我们正在处理的项目中有一个类具有私有(private) Init
所以我已经将事件设置为一个类 void item_PropertyChanged(object sender, PropertyChangedEventArgs e) { }
在我的 UI 代码中,我有很多具有相同基本框架的类: 派生自 INotifyPropertyChanged 包含以下代码: void NotifyPropertyChanged(String info
我在 xamarin.forms 中创建了 Android 应用程序,但问题是 PropertyChangedEventHandler 导致内存泄漏。 我的代码: protected virtual
我有以下类将作为绑定(bind)源: public class Timeline : Canvas, INotifyPropertyChanged { public static readonly
这是一个非常简单的问题,但我想知道是否有人可以解释第 4 行实际上在做什么?所以第一行给处理程序一个事件。我真的不知道在什么情况下处理程序会返回 null 或最后一行的作用。 当您将对象和更改的属性传
现在的问题是,
当我观察变量时,我的 PropertyChanged 事件已正确设置,但在代码的某处它被重置为 null,我不知道如何找出发生这种情况的位置。 代码如下: public event PropertyC
我的 WPF 应用程序中有一个属性,我试图将其绑定(bind)到 UI。当我直接在 View 模型中更新属性时,它会按预期工作。但是,当我尝试使用事件从另一个类中更新此属性时,绑定(bind)似乎不起
我对 INotifyPropertyChanged 的 PostSharp 实现没有什么问题。 PostSharp 在编译时添加了 PropertyChangedEventHandler Proper
我认为两者是一样的,但为什么两者都用在同一个方法中呢?我认为有一点不同。下面是一些代码来显示两者之间的区别: private void LoadItemListing() { _items =
我有以下代码,其中有一个“PropertyChangedEventHandler”。我看到它有一个属性 PropertyChangedEventHandler,但我没有看到它调用“new Proper
到目前为止,我的模型实现了 INotifyPropertyChanged,并且每个属性都会引发此事件。几乎所有 ViewModel 都通过 PropertyChangedEventHandler 监听
文章http://msdn.microsoft.com/en-us/magazine/dd419663.aspx具有以下代码示例: public event PropertyChangedEventH
我已经在下面的类中实现了 INotifyPropertyChanged public class FactoryItems : INotifyPropertyChanged {
我做了一个小项目来学习一点关于 MVVM 的知识。这是一个计算器,可以计算您何时可以下类回家。 我做了一个UserControl有两个文本框和一个标签作为简单的“时间选择器”。这个 Usercontr
我正在尝试使用 C# 和 XAML 遵循 MVVM 设计范例。我遇到了嵌套用户控件的问题。我正在尝试将嵌套用户控件上的元素绑定(bind)到 ViewModel 中的一个值(通过 DataContex
在我的 WPF 应用程序中,我实现了 LINQ to SQL 查询,该查询填充与 ListView 连接的 Observable 集合。正是在这个方法中,我可以从某个地方调用它,它工作正常: priv
我正在按照建议开发 wcf 服务 here .它解决了我最初在开发原始 .NET 2.0 Web 服务时遇到的 namespace 冲突问题,但我又遇到了另一个问题。 我试图传递给 wcf 服务的对象
我是一名优秀的程序员,十分优秀!