У меня есть этот WPF структура:Элементы управления привязкой данных не работают?
<UserControl
xmlns:viewModel="clr-namespace:..ViewModel.ToneAudiogramLegend">
...
<DataTemplate DataType="{x:Type viewModel:ToneAudiogramLegendTableViewModel}">
...
<DataGrid Grid.Row="1" Grid.Column="0" ItemsSource="{Binding ToneAudiogramLegneds}" HeadersVisibility="None" AutoGenerateColumns="False" IsReadOnly="True" BorderBrush="Transparent" BorderThickness="0"
MinWidth="100" Height="{Binding Height, Mode=OneWay}" KeyboardNavigation.DirectionalNavigation="None" Grid.ColumnSpan="6" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" GridLinesVisibility="None" ColumnWidth="*"
Margin="1" wpfmvvm:DataGridRowHeightBehaviour.AutoFitRowHeight="True" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
<DataGrid.Columns>
<DataGridTemplateColumn HeaderTemplate="{x:Null}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label x:Name="PART_Content" Content="{Binding Path=Left.Content}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Foreground="Gold"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsMonochrome}" Value="True">
<Setter TargetName="PART_Content" Property="Foreground" Value="Green"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
<DataTemplate>
связывание Value
работ, потому что цвет получает значение по умолчанию Left.Color
из <Setter Property="Foreground" Value="{Binding Path=Left.Color}"/>
Свойство IsMonochrome
изменяет значение, когда происходит определенное событие, но на первый план цвет не меняется на зеленый. Я не совсем уверен, что формат и структура уместны. Я не уверен, что если <DataTemplate>
является проблемой, так как у меня есть еще один <DataTemplate>
в более высокого порядка
Классы:
public partial class ToneAudiogramLegendTableViewModel : ViewModelBase, IToneAudiogramLegendTableViewModel, IHandleMonochromeReportElement
{
public bool IsMonochrome
{
get { return GetValue<bool>("IsMonochrome"); }
private set { SetValue("IsMonochrome", value); }
}
public void SwitchToMonochromeMode()
{
IsMonochrome = true;
}
public void SwitchToColorMode()
{
IsMonochrome = false;
}
}
и
public class ToneAudiogramLegendViewModel : ViewModelBase, IToneAudiogramLegendVM
{
public string Name
{
get { return GetValue<string>("Name"); }
set { SetValue("Name", value); }
}
public LegendViewModel Left
{
get { return GetValue<LegendViewModel>("Left"); }
set { SetValue("Left", value); }
}
}
и
public class LegendViewModel : ViewModelBase
{
public object Content
{
get { return GetValue<object>("Content"); }
set { SetValue("Content", value); }
}
public Brush Color
{
get { return GetValue<Brush>("Color"); }
set { SetValue("Color", value); }
}
public LegendViewModel(object content, Brush color)
{
Content = content;
Color = color;
}
}
Что может проблема?
Использование этикеток работ, так как содержимое отображается, как это было с ContentPresenter. Однако DataTrigger не работает. Я просто увидел, что, поскольку DataTemplate не ссылался на мой класс C#, на isMonochrome нельзя ссылаться (я тестировал с помощью предложений Path). Несмотря на то, что я ссылался на него, он по-прежнему не может изменить цвет при возникновении события. Могу ли я проверить это вручную вместо привязки? Я просто хочу проверить, работает ли datatrigger. Я чувствую, что он никогда не видит '', а только значение по умолчанию, указанное в 'Path = LeftColor' –
ot0
1. можете ли вы проверить окно вывода в visual studio во время отладки, если есть какие-либо ошибки привязки? 2. Удалите привязку переднего плана с метки и оставьте триггер, чтобы изолировать проблему. – Liero
3. Где определено свойство IsMonochrome? это тот же объект, где определено свойство 'Left'? возможно, вам нужен '{Binding Path = Left.IsMonochrome}' в вашем datatrigger – Liero