我有包含2列的數據網格,我想展示一些列#2細胞是:DatagridTemplateColumn與觸發器無法綁定
- 組合框
- 文本框
代碼:
解決方案#1:
<Window.Resources>
<DataTemplate x:Key="DropDownTemplate">
<StackPanel>
<ComboBox SelectedValuePath="Id" DisplayMemberPath="Name" ItemsSource="{Binding MarketConfigurationLOVs, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="TextBoxTemplate">
<StackPanel>
<TextBox Text="{Binding ConfigurationValue, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</DataTemplate>
</Window.Resources>
這裏DataGrid的標籤:
<DataGrid ItemsSource="{Binding Path= MarketConfigurationValues,Mode=TwoWay}" HeadersVisibility="None" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Width="120" Binding="{Binding Path= ConfigurationName}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding}" >
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding HasLOV}" Value="true">
<Setter Property="ContentTemplate" Value="{StaticResource DropDownTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding HasLOV}" Value="false">
<Setter Property="ContentTemplate" Value="{StaticResource TextBoxTemplate}" />
</DataTrigger>
<!-- and so on -->
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
這未能顯示出實際價值,因爲它顯示的屬性名稱,並始終在下拉列表,當顯示單元我將TextBoxContentTemplate與ComboBoxContentTemplate進行了交換,它將所有單元格顯示爲textBox,因此它似乎忽略了該觸發器,但是當我調試時,我發現HasLOV中的一些項目包含true並且一些包含false
解決方案2:(也沒有)參考:從以下後WPF MVVM Creating Dynamic controls
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl x:Name="MyContentControl" Content="{Binding}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding HasLOV}" Value="false">
<Setter TargetName="MyContentControl" Property="ContentTemplate" Value="{StaticResource TextBoxTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding HasLOV}" Value="true">
<Setter TargetName="MyContentControl" Property="ContentTemplate" Value="{StaticResource DropDownTemplate}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
視圖模型喬恩的解決方案是大課,但我在這裏拉與我的問題的主要部分。在構造函數中,我創建了MarketConfigurationValue的列表,並且在MarketConfigurationLOVs中填充了值,以防如果我設置HasLov = true並且我在configurationValue中填充了值(如果我設置了HasLov = false並且運行該應用程序並在調試模式下),我發現主對象列表包含了我正確的說,但失敗了的情況下,顯示組合框HasLov =真和文本框的情況下,HasLov =假:
public class MarketConfigurationValue
{
public string ConfigurationName { get; set; }
public string ConfigurationValue { get; set; }
public int ConfigurationValueId { get; set; }
public List<Market_Config_Lov> MarketConfigurationLOVs {get;set;}
public bool HasLov { get; set; }
}
public class Market_Config_Lov
{
public virtual string Name { get; set; }
public virtual int Sequence { get; set; }
}
能否請你幫忙嗎?
嘗試在ContentControl中通過DataContext = {Binding}替換Content = {Binding}。 –
嘗試在DataTemplate.Triggers下放置觸發器。也許這可以幫助:http://www.codeproject.com/Articles/18303/A-Guided-Tour-of-WPF-Part-4-Data-templates-and-tri – Per
@Florian GI:當我將Content = {綁定}與DataContext = {綁定}是:文本框始終是空的,沒有下拉 –