需要在视图模型的数据上下文标记声明中绑定属性,如下所示:`
<Window x:Class="control.controlnamespace"
xmlns:vm="clr-namespace"..>
<Window.DataContext>
*<vm:ViewModelTwo Property="{Binding SomeProperty, ElementName=myControl}"/>* <-- Issue Here
</Window.DataContext>
<Grid>
<UC1 x:Name="myControl"/>
</Grid>
我遇到麻烦的地方没有发生更新,绑定也没有发生。
答案 0 :(得分:0)
我不确定但是试试这个:
在您的MainWindow.xaml中:
<Window ........ >
<Window.DataContext>
<vm:ViewModelOne />
</Window.DataContext>
</Window>
在ViewModelOne中:
public class ViewModelOne : INotifyPropertyChanged
{
.....
.....
private string _UCText;
public string UCText
{
get
{
return _UCText;
}
set
{
_UCText = value;
OnPropertyChanged("UCText");
}
}
// Implement INotifyPropertyChanged
.....
.....
}
在您的UserControl中:
<UserControl ...... >
<UserControl.DataContext>
<vm:ViewModelTwo />
</UserControl.DataContext>
<TextBlock Text="{Binding Path=DataContext.UCText,
RelativeSource={RelativeSource Mode=FindAncestor
AncestorType={x:Type Window}}}" />
</UserControl>
如果您对上述代码有任何疑问,请随时提问。
答案 1 :(得分:0)
我找到了解决方案:
设置或尝试在窗口datacontext标记内的viewmodel声明中设置属性是错误的,并且不会产生任何影响。这是因为在设置此上下文时,它位于不同的线程下,因此不会通知更新或更改。
错误---&gt;
<Window.DataContext>
<vm:ViewModelTwo Property="{Binding SomeProperty, ElementName=myControl}"/>* <-- Issue Here
</Window.DataContext>
所以解决这个问题的方法是实际获取当前加载的元素(这可能是用户控件,窗口等) 正确 - &gt;
<Window Name="myWindowName">
<Window.DataContext>
<vm:ViewModel />
</Window.DataContext>
<control:Control x:Name="myControl" PropertyToBind="{Binding Path=DataContext.Property, Mode=TwoWay, ElementName=myWindowName or myUserControlName}" >
</Window>