2012-08-08 66 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

相關問題