C# ViewModel属性绑定的单向DependencyProperty
我有一个带有依赖属性的C# ViewModel属性绑定的单向DependencyProperty,c#,wpf,mvvm,binding,C#,Wpf,Mvvm,Binding,我有一个带有依赖属性的UserControl,我需要将此属性绑定到父视图模型中的CLR属性。我编写了一个小应用程序来演示这个问题 用户控制 <UserControl ... x:Name="usr"> <Grid> <TextBox Text="{Binding SomeProperty, ElementName=usr}"/> </Grid> </UserControl&
UserControl
,我需要将此属性绑定到父视图模型中的CLR属性。我编写了一个小应用程序来演示这个问题
用户控制
<UserControl
...
x:Name="usr">
<Grid>
<TextBox Text="{Binding SomeProperty, ElementName=usr}"/>
</Grid>
</UserControl>
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private string _SomeText;
public string SomeText
{
get { return _SomeText; }
set
{
_SomeText = value;
OnPropertyChanged();
}
}
}
父视图
<Window ... >
<Window.DataContext>
<ViewModels:MainWindowViewModel/>
</Window.DataContext>
<Grid>
<Controls:UserControl1 SomeProperty="{Binding SomeText, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>
本质上,我需要的是用户控件的TextBox
(SomeProperty
属性)中输入的任何内容都需要更新ViewModel的SomeText
属性
我不需要双向装订
为代码之海道歉,但如果有人想要它,它就在那里。你需要模式=OneWayToSource@VictorMukherjee好。我今天学到了一些东西。如果您可以在文本更改时更新绑定属性,则可以获得额外的积分。我刚刚尝试了
NotifyOnSourceUpdated
,但似乎不起作用。当前,它仅在文本框失去焦点时更新。您的绑定中有UpdateSourceTrigger=PropertyChanged
。这是在文本更改时立即更新VM绑定属性的正确方法。您确定在文本框中键入时没有执行该属性的设置程序吗?您需要在
中使用UpdateSourceTrigger=PropertyChanged
,否则某些属性不会立即更新,因此某些文本也会更新。@LPL非常好。谢谢
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private string _SomeText;
public string SomeText
{
get { return _SomeText; }
set
{
_SomeText = value;
OnPropertyChanged();
}
}
}