为了账号安全,请及时绑定邮箱和手机立即绑定

DependencyProperty绑定问题

DependencyProperty绑定问题

慕尼黑的夜晚无繁华 2019-06-29 11:16:01
DependencyProperty绑定问题我创建了一个小文件浏览器控件:<UserControl x:Class="Test.UserControls.FileBrowserControl"              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"               xmlns:d="http://schemas.microsoft.com/expression/blend/2008"               mc:Ignorable="d"               d:DesignHeight="44" d:DesignWidth="461" Name="Control">     <Grid Margin="3">         <Grid.ColumnDefinitions>             <ColumnDefinition Width="*"/>             <ColumnDefinition Width="Auto"/>         </Grid.ColumnDefinitions>         <TextBox  Margin="3" Text="{Binding SelectedFile}" IsReadOnly="True" TextWrapping="Wrap" />         <Button HorizontalAlignment="Right" Margin="3" Width="100" Content="Browse" Grid.Column="1" Command="{Binding BrowseCommand}" />     </Grid></UserControl>我就是这样用的:<userControls:FileBrowserControl SelectedFile="{Binding SelectedFile}" Filter="XSLT File (*.xsl)|*.xsl|All Files (*.*)|*.*"/>(SelectedFile是使用此控件的用户控件的ViewModel的属性)当前的问题是,当我单击Browse时,user控件中的TextBox正在正确更新,但viewModel父控件的SelectedFile属性没有设置(没有调用set属性)。如果我将绑定模式设置为twoway,则会得到以下异常:An unhandled exception of type 'System.StackOverflowException' occurred in Unknown Module.那我做错什么了?
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

主要问题是在其构造函数中将UserControl的DataContext设置为自身:

DataContext = this;

不应该这样做,因为它破坏了任何基于DataContext的绑定,例如对继承的DataContext值中的视图模型实例。

相反,您将更改UserControl的XAML中的绑定,如下所示:

<TextBox Text="{Binding SelectedFile,
                RelativeSource={RelativeSource AncestorType=UserControl}}" />

现在,当您使用UserControl并编写一个绑定时,如下所示

<userControls:FileBrowserControl SelectedFile="{Binding SelectedFile}" />

SelectedFile属性绑定到视图模型中的SelectedFile属性,该属性应位于从父控件继承的DataContext中。


查看完整回答
反对 回复 2019-06-29
?
温温酱

TA贡献1752条经验 获得超4个赞

使用此方法:

<userControls:FileBrowserControl SelectedFile="{Binding SelectedFile}" ...

FileBrowserControl的DataContext已经设置为自身,因此您实际上要求绑定到SelectedFile,其中DataContext是FileBrowserControl,而不是父ViewModel。

给视图一个名称,然后使用ElementName绑定。

SelectedFile="{Binding DataContext.SelectedFile, ElementName=element}"


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 747 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信