Çalıştığım uygulamada, izlediğim birkaç öğe var. Her öğenin birkaç durumu vardır (açık, kapalı, değiştir). Devletler, modele kaydedilir ve pencerenin DataContext'i buna ayarlanır. Her düğme DataContext, SortableBindingList öğesinde tek bir öğeye ayarlandı. XAML'de Düğme ve DataTrigerrs içinde Kontrol Şablonu oluşturdum. Bununla birlikte, bazen yalnızca ilk düğmeler için öğe gösterilir, bazen sadece ilk üç düğme için (DataTrigger içine hangi içeriğe girdiğime bağlı olarak). Snoop'ta kontrol ettiğimde, üç düğmenin de doğru DataContext setine sahip olduğunu ve hiçbir bağlama hatası olmadığını görüyorum. Her düğmenin 'servertate' özelliğinin değerine bağlı olarak içeriğini göstermesini beklerim, ancak bu gerçekleşmez. Neyi yanlış yapıyorum?Düğme denetim şablonu ve DataTriggers
Kontrol Şablon Window.Resources gider:
<ControlTemplate x:Key="buttonTemplate" TargetType="Button" >
<Border BorderThickness="1"
BorderBrush="Gray"
Margin="2"
Width="40" Height="35"
>
<Border.Background>
<SolidColorBrush Color="Brown" />
</Border.Background>
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding serverstate}" Value="0">
<Setter Property="Content">
<Setter.Value>
<TextBlock Name="a1" Text="OFF" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White" />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding serverstate}" Value="1">
<Setter Property="Content">
<Setter.Value>
<TextBlock Name="a2" Text="CHNG" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White" />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding serverstate}" Value="2">
<Setter Property="Content">
<Setter.Value>
<TextBlock Name="a3" Text="ON" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="White" />
</Setter.Value>
</Setter>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Düğmeler:
<Button Name="state1"
DataContext="{Binding ActiveServers[0]}"
Template="{StaticResource buttonTemplate}"
/>
<Button Name="state2"
DataContext="{Binding ActiveServers[1]}"
Template="{StaticResource buttonTemplate}"
/>
<Button Name="state3"
DataContext="{Binding ActiveServers[2]}"
Template="{StaticResource buttonTemplate}"
/>
<Button Name="state4"
DataContext="{Binding ActiveServers[3]}"
Template="{StaticResource buttonTemplate}"
/>
<Button Name="state5"
DataContext="{Binding ActiveServers[4]}"
Template="{StaticResource buttonTemplate}"
/>
Bu düğmeler penceresinden nasıl göründüğünü:
Bildirimi nasıl düğmesi 4 ve 5, datacontext'te özellik değerini tamamen yok sayar.
Modeli:
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public Model()
{
}
private SortableBindingList<Server> _activeServers;
public SortableBindingList<Server> ActiveServers
{
get {
if (_activeServers == null)
{
_activeServers = new SortableBindingList<Server>();
}
return _activeServers;
}
set
{
_activeServers = value;
OnPropertyChanged("serverList");
}
}
// Create the OnPropertyChanged method to raise the event
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
"TextBlocks" içindeki "Text" özelliği için 'DataTrigger 'yerine' ValueConverter' kullanılmasını önerebilirim. – bars222
Ur ilk 3 düğme düzgün gösteriyor "ActiveServers" koleksiyonunun bazı bilinmeyen 'servertate' değeri içerdiği anlamına gelir. – AnjumSKhan
@AnjumSkhan Hayır, koleksiyonumda her şey yolunda. Sorun, aşağıda kullanıcı bar222 tarafından başarıyla çözüldü! – VladacusB