2012-06-04 101 views
1

我想填充一列作爲組合框的數據網格,但我需要當綁定到組合框的集合爲空時列變爲文本框列。我已經定義瞭如下列:根據源更改列樣式

Binding binding = new Binding(「DataContext.Prices」); binding.RelativeSource = new RelativeSource(RelativeSurceMode.FindAncestor,typeof(UserControl),1);

DataGridComboBoxColumn productPrices = new DataGridComboBoxColumn() 
{ 
    ElementSyle = new Style 
    { 
     TargetType = typeof(ComboBox), 
     Setters = 
     { 
      new Setter 
      { 
       Property=ComboBox.ItemsSourceProperty, 
       Value= binding 
      } 
     } 
    }, 
    EditingElementSyle = new Style 
    { 
     TargetType = typeof(ComboBox), 
     Setters = 
     { 
      new Setter 
      { 
       Property=ComboBox.ItemsSourceProperty, 
       Value= binding 
      } 
     } 
    }, 
    DisplayMemberPath = new Binding("Price"); 
    SelectedValuePath = new Bindnt("Price"); 
}; 

myDataGrid.Columns.Add(productPrices); 
myDataGrid.Columns.Add(new DataGridTextColumn(){ Header="Name", Binding=new Binding("Name")}); 

我定義myDataGrid:

<DataGrid Name="myDataGrid" ItemsSource="{Binding Products}" /> 

在我的視圖模型我創建了一個

var products = new List<Product> 
{ 
    new Product 
    { 
     Name="Prod 1", 
     Price="12.5" 
    } 
} 
var prices = new List<PriceL> 
{ 
    new PriceL 
    { 
     Price="12.5" 
    }, 
    new PriceL 
    { 
     Price="10" 
    } 

} 

ICollectionView Products = CollectionViewSource.GetDefaultView(products); 
ICollectionView Prices = CollectionViewSource.GetDefaultView(prices); 

我需要的是,當「價格」是空列成爲一個文本框,我的工作與MVVM和我嘗試與elementStyle,但我不能看到Combobox中的任何事件,讓我驗證它的數據源。任何機構能幫助我嗎?

回答

1

我剛剛找到一個辦法做到這一點

<UserControl.Resources> 
    <DataGrid ItemsSource={binding} x:Key="DataGrid1"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{ID}"/> 
      <DataGridTextColumn Binding="{Name}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
    <DataGrid ItemsSource={binding} x:Key="DataGrid2"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{ID}"/> 
      <DataGridCheckBoxColumn Binding="{Accepted}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

</UserControl.Resources> 
<Grid> 
    <ContentControl Content="{StaticResource DataGrid1}" DataContext="{Binding MyTable}" Name="myContent"/}  
</Grid> 

ŸPOR codigo puede cambiarse EL內容

myContent.Content = this.FindResource( 「DataGrid2」);

0

您是否查看過觸發所需視覺變化的行爲,如DataStateBehavior?你可能想在虛擬機中放入一個布爾屬性來檢測源是否有效,哪些行爲可以觸發。

+0

好的,謝謝我要去搜索它。但是你知道與Visual Studio合作的任何信息來源嗎?我不在混合 – Nandhi

+0

下載試用版並使其運行。它只會將代碼添加到Xaml中,而不會讓您無法購買該產品。但是(恕我直言)真正成爲一名熟悉Blend的Xaml開發人員不會損害您的職業生涯,如果您發現它是一種使用工具,請讓管理層購買它。 – OmegaMan

相關問題