2012-09-26 86 views
1

所以你可以看到ID列應該隱藏,但它不是。調試器顯示xaml文件中IDVisible的值爲「隱藏」,但它永遠不會顯示在窗口中。我正在調用屬性更改方法。我做錯了什麼,ID列應該消失,或者至少這是我想要做的。Datagrid沒有更新,datagridtextcolumn上的可見性屬性

MainWindow.xaml

這裏是MainWindowViewModel.cs

namespace MagicDB 
{ 
class MainWindowViewModel : ObservableObject 
{ 
    private CardDB _cards; 
    private Command _InitCardDB; 
    private Visibility _IDVisible; 

    public CardDB Cards 
    { 
     get { return _cards; } 
     set { _cards = value; OnPropertyChanged("Cards"); } 
    } 

    public Visibility IDVisible 
    { 
     get { return _IDVisible; } 
     set { _IDVisible = value; VerifyPropertyName("IDVisible"); OnPropertyChanged("IDVisible"); } 
    } 

    public MainWindowViewModel() 
    { 
     IDVisible = Visibility.Hidden; 
     _InitCardDB = new Command(InitDB, true); 
     Cards = new CardDB(); 
    } 

而XAML文件中的代碼....

<Window x:Class="WpfDataGrid.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Width="500" Height="500"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50" /> 
     <RowDefinition Height="450*" /> 
    </Grid.RowDefinitions> 
    <DataGrid AutoGenerateColumns="False" 
     HorizontalAlignment="Left" 
     Name="dataGrid1" 
     VerticalAlignment="Top" 
     ItemsSource="{Binding Cards.cardDB}" 
     CanUserReorderColumns="True" 
       CanUserResizeColumns="True" 
       CanUserResizeRows="False" 
       CanUserSortColumns="True" 
       AlternatingRowBackground="LightBlue" 
       Width="480" Height="auto" Grid.Row="1" IsSynchronizedWithCurrentItem="True" 
       > 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ID" Binding="{Binding CardID}" Width="25" Visibility="{Binding IDVisible,Mode=TwoWay}"></DataGridTextColumn> 

回答

1

我會檢查你的可見約束力,因爲它是最可能會失敗。這page解釋了一些可以使用的方法。我個人更喜歡調整跟蹤級別。

我相信綁定失敗的原因是因爲你DataContext(我假設你已經設置它的地方)沒有進入DataGrid的列本身。這個page解釋了我過去用來解決這個問題的一個修復。我想我最初從這個page找到那篇文章,其中有幾篇很好的瞭解WPF'Gotchas'。