2012-08-08 65 views
1

我想将依赖项属性绑定到集合的当前选择,并且出于我无法理解的原因,集合更改时绑定不会更新。DependencyProperty绑定不会更新到集合CurrentItem

在下面的例子中,我给出了两个例子。一个是正​​确更新(在文本块/运行),另一个只显示初始元素,并且在数据网格选择更改时不会更改。在这个例子中

<Grid> 
    <Grid.Resources> 
     <CollectionViewSource Source="{Binding Path=List}" x:Key="myViewModel"/> 
     <my:UpdateNotWorking MyObjModel="{Binding Source={StaticResource myViewModel}, Path=CurrentItem}" x:Key="updateNotWorking" /> 
    </Grid.Resources> 

    <DataGrid ItemsSource="{Binding Source={StaticResource myViewModel}}" Name="mylistbox"/> 
    <TextBlock TextWrapping="Wrap" FontWeight="Bold" Foreground="#FF50CEFF" FontSize="24" TextAlignment="Center" Height="75"> 
      <Run Text="{Binding Source={StaticResource myViewModel}, Path=text}" Foreground="#FF00E200" /> 
    </TextBlock> 
    <TextBox Text="{Binding Source={StaticResource updateNotWorking}, Path=MyObjModel.text}" Height="22"/> 

</Grid> 

我的依赖属性是从所述XAML代码实例化的“UpdateNotWorking”依赖对象上的“MyObjModel”。

如果我的房产没有正确更新,我将不胜感激。

Example Project

回答

0

这个XAML粘贴到你的主窗口。

<Grid> 
    <Grid.Resources> 
     <CollectionViewSource Source="{Binding Path=List}" x:Key="myViewModel" /> 
     <my:UpdateNotWorking x:Key="updateNotWorking" /> 
    </Grid.Resources> 

    <DataGrid ItemsSource="{Binding Source={StaticResource myViewModel}}" Name="mylistbox" 
       SelectedItem="{Binding Source={StaticResource updateNotWorking}, Path=MyObjModel, UpdateSourceTrigger=PropertyChanged}" /> 
    <TextBlock TextWrapping="Wrap" FontWeight="Bold" Foreground="#FF50CEFF" FontSize="24" TextAlignment="Center" 
       Height="75"> 
     <Run Text="{Binding Source={StaticResource myViewModel}, Path=text}" Foreground="#FF00E200" /> 
    </TextBlock> 
    <TextBox Text="{Binding Source={StaticResource updateNotWorking}, Path=MyObjModel.text, UpdateSourceTrigger=PropertyChanged}" 
      Height="22" /> 

    </Grid> 

它是什么,现在做基于DataGrid的SelectedValue被设置updateNotWorkingMyObjModel财产,与UpdatePropertyTrigger设置为PropertyChanged立即看到变化。我们不再需要通过List的CurrentItem来定义updateNotWorking的属性,因为它不会仅仅通过选择DataGrid来更改。你可以保持设置,但它不是必需的,因为我们正在用DataGrid SelectedValue做所有的手工劳动。

+0

这有效,但我仍然不明白为什么以前的代码不工作。我没有绑定到收藏视图的当前项目吗?为什么它没有改变? – HotStuff68 2012-08-09 03:18:42

+0

因为CurrentItem是只读的,并且它不是一个依赖属性(所以它不能被绑定到),最后它不会实现INotifyPropertyChanged,所以它对任何类型的UI绑定都没有用。另一方面,DataGrid的SelectedValue是一个依赖属性,并且享有使UI绑定正常工作的所有要求。所以我们基本上只是“扭转”了你正在做的事情,你的路线在被动地等待价值改变的时候[无济于事],而这正在积极地改变价值。 – erodewald 2012-08-09 14:09:06

+0

这使得它更清晰。非常感谢你的解释! – HotStuff68 2012-08-09 22:19:09

相关问题