2008-12-21 22 views
7

Internet'te, XAML'deki bir denetimin Görünürlük özelliği için bir boole eklenmesiyle ilgili birkaç örnek gördüm. İyi örneklerin çoğu BooleanToVisibiliy dönüştürücüsünü kullanır.Bir Görünürlük özelliğine XAML'de Görünürlük Bağlama

Denetimdeki Visible özelliğini yalnızca arkaplanda System.Windows.Visibility özelliğine bağlamak için ayarlamak istiyorum, ancak çalışmak istemiyor gibi görünmüyor.

base.DataContext = this; 
: Ben de bu telefon var penceresinin Yapıcıda

private Visibility _actionsVisible; 
public Visibility ActionsVisible 
{ 
    get 
    { 
     return _actionsVisible; 
    } 
    set 
    { 
     _actionsVisible = value; 
    } 
} 

: Bu özellik için kod

<Grid x:Name="actions" Visibility="{Binding Path=ActionsVisible, UpdateSourceTrigger=PropertyChanged}" /> 

geçerli:

Bu

benim XAML olduğu

ActionsVisible veya this.actions.Visibility öğelerini güncellediğimde, durum aktarılmaz. Neyin yanlış olabileceğine dair bir fikrin var mı?

+0

Sen oluşturuldukları üzerinde parçacığı üzerinde tüm denetimlere erişmek gerekir. Denetimleri diğer iş parçacıklarından güncelleyebilirsiniz, ancak WPF Dispatcher'ı kullanarak UI iş parçacığı aracılığıyla güncellemeyi eşleştirmeniz gerekir. Bu [makale] (http://msdn.microsoft.com/en-us/magazine/cc163328.aspx) yardımcı olmalıdır. –

cevap

7

Sorun şu ki, WPF, ActionVisible özelliğinin gerçeğinizi bildirmediğinizden beri değiştiğini bilemez.

Sınıfınızın INotifyPropertyChanged uygulamasını gerçekleştirmesi gerekir, ardından ActionsVisible için ayarlanmış yönteminizde PropertyChanged olayını ActionsVisible ile değiştirilen özellik adıyla başlatmanız gerekir. Bu yardımcı olur

Umut ...

+0

Bunu yapmaya karşı değilim, ancak aynı zamanda kod arkasındaki bir string özelliğine bağlı bir TextBox'um var ve INotifyPropertyChanged olayı olmadan çalışır. UpdateSourceTrigger'ı PropertyChanged'e ayarlayarak INotifyPropertyChanged'i kullanmam gerekmeyeceğini düşündüm. – Jared

+0

Bunun nasıl yapıldığından emin değil! Kodunuzun daha fazlasını göndermek ister misiniz? UpdateSourceTrigger özelliği, kaynağın (yani, bağlandığınız özellik) güncellendiğinde yalnızca denetler. Görünürlük mülkünüz üzerinde herhangi bir etkisi olmayacaktır. –

+0

Teşekkürler Craig. Daha önceki yorumumda daha açık olmalıydım. Kod arkasındaki bir string özelliğine bağlı bir TextBox'ın Text özelliğim olduğunu söylemek istedim. Bu işe yarıyor ve eğer hala bunun kaynağını görmek istiyorsan haberim olsun. – Jared

8
bir DependencyProperty olması mülkünüzü değiştirin

. Bu sizin için güncellemeyi ele alacaktır.

 public Visibility ActionsVisible 
    { 
     get { return (Visibility)GetValue(ActionsVisibleProperty); } 
     set { SetValue(ActionsVisibleProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for ActionsVisible. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ActionsVisibleProperty = 
     DependencyProperty.Register("ActionsVisible", typeof(Visibility), typeof(FooForm)); 
+0

Bu kodu, iş parçacığı dışında bir iş parçacığı içinde çalıştırırken, bir istisna vardır. Bağlamaya geçtiğim bütün, UI öğelerinin birden çok ileti dizisinden güncellenmesine izin vermekti. Tek bir iş parçacığı üzerinde çalışması gerekiyorsa, bu çözüm benim için çalışacak gibi görünmüyor. – Jared

1

Yaz: NotifyPropertyChanged("ActionsVisible")

İlgili konular