Forum: PC-Programmierung C# WPF XAML - Eigenschaft an ein Objekt binden


von MajorMoritz (Gast)


Lesenswert?

Hallo,

ich versuche grade die Eigenschaft IsEnabled eines User-Controls mit 
einem Objekt im XAML Code einer WPF Anwendung zu verbinden. Wenn das 
Objekt gleich null ist soll die IsEnabled Eigenschaft auf false gesetzt 
werden. Sonst soll sie true sein. Hat dazu jemand eine Idee oder hat 
sowas schonmal gemacht?

Moritz

von Sebastian__ (Gast)


Lesenswert?

Es gibt im Binding ein Fallback Wert wenn das Binding scheitert.
1
IsEnabled="{Binding ElementName=myPage, Path=myValue, FallbackValue=False}

von Michael K. (brutzel)


Lesenswert?

Du könntest einen Konverter schreiben und ihn im Binding angeben 
(natürlich sinnvollere Namen wählen):
1
using System;
2
using System.Windows;
3
using System.Windows.Data;
4
5
public class MyConverter : IValueConverter
6
{
7
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
8
  {
9
    return value != null;
10
  }
11
12
  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
13
  {
14
    return DependencyProperty.UnsetValue;
15
  }
16
}
1
<Window.Resources>
2
  <local:MyConverter x:Key="NullToBooleanConverter" />
3
</Window.Resources>
4
5
...
6
7
<local:MyUserControl Height="100" Width="100" IsEnabled="{Binding Foo,Converter={StaticResource NullToBooleanConverter}}" />

Oder per Trigger:
1
<local:MyUserControl Height="100" Width="100">
2
  <local:MyUserControl.Style>
3
    <Style TargetType="{x:Type local:MyUserControl}">
4
    <Setter Property="IsEnabled" Value="True" />
5
      <Style.Triggers>
6
        <DataTrigger Binding="{Binding Foo}" Value="{x:Null}">
7
          <Setter Property="IsEnabled" Value="False" />
8
        </DataTrigger>
9
      </Style.Triggers>
10
    </Style>
11
  </local:MyUserControl.Style>
12
</local:MyUserControl>

Man könnte auch einfach ein Property implementieren und daran binden:
1
public bool BlaEnabled
2
{
3
  get { return Foo != null; }
4
}

Und nicht vergessen, den DataContext des Fensters zu setzen.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.