SORU
18 Mart 2009, ÇARŞAMBA


OneWayToSource salt okunur özelliğinden bağlama XAML

Modu OneWayToSource 11 *bir özellik bağlanmaya çalışıyorum, ama bu olamaz XAML yapılması gibi görünüyor:

<controls:FlagThingy IsModified="{Binding FlagIsModified, 
                                          ElementName=container, 
                                          Mode=OneWayToSource}" />

Anlıyorum:

Özelliği 'FlagThingy.'Ulaşılabilir bir set olmadığı için set erişimci. İsModified

IsModified okuma FlagThingy DependencyProperty. Kap FlagIsModified özelliği bu değeri bağlamak istiyorum.

Temiz olması için:

FlagThingy.IsModified --> container.FlagIsModified
------ READONLY -----     ----- READWRITE --------

Bu mümkün kullanarak sadece XAML?


Güncelleme:İyi, FlagThingy üzerinde konteyner bağlama ayarlayarak ve bu durumda tamir ettim. Ama yine de eğer bu mümkün olup olmadığını bilmek istiyorum.

CEVAP
18 Mart 2009, ÇARŞAMBA


Biraz araştırma OneWayToSource için sonuçlar

Seçenek # 1.

// Control definition
public partial class FlagThingy : UserControl
{
    public static readonly DependencyProperty IsModifiedProperty = 
            DependencyProperty.Register("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());
}
<controls:FlagThingy x:Name="_flagThingy" />
// Binding Code
Binding binding = new Binding();
binding.Path = new PropertyPath("FlagIsModified");
binding.ElementName = "container";
binding.Mode = BindingMode.OneWayToSource;
_flagThingy.SetBinding(FlagThingy.IsModifiedProperty, binding);

Seçenek # 2

// Control definition
public partial class FlagThingy : UserControl
{
    public static readonly DependencyProperty IsModifiedProperty = 
            DependencyProperty.Register("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());

    public bool IsModified
    {
        get { return (bool)GetValue(IsModifiedProperty); }
        set { throw new Exception("An attempt ot modify Read-Only property"); }
    }
}
<controls:FlagThingy IsModified="{Binding Path=FlagIsModified, 
    ElementName=container, Mode=OneWayToSource}" />

Seçenek # 3 (salt okunur bağımlılık özelliği True)

Sistem.ArgumentException: '' özelliği veriye bağlı olamaz. İsModified

// Control definition
public partial class FlagThingy : UserControl
{
    private static readonly DependencyPropertyKey IsModifiedKey =
        DependencyProperty.RegisterReadOnly("IsModified", typeof(bool), typeof(FlagThingy), new PropertyMetadata());

    public static readonly DependencyProperty IsModifiedProperty = 
        IsModifiedKey.DependencyProperty;
}
<controls:FlagThingy x:Name="_flagThingy" />
// Binding Code
Same binding code...

Reflektör cevap verir:

internal static BindingExpression CreateBindingExpression(DependencyObject d, DependencyProperty dp, Binding binding, BindingExpressionBase parent)
{
    FrameworkPropertyMetadata fwMetaData = dp.GetMetadata(d.DependencyObjectType) as FrameworkPropertyMetadata;
    if (((fwMetaData != null) && !fwMetaData.IsDataBindingAllowed) || dp.ReadOnly)
    {
        throw new ArgumentException(System.Windows.SR.Get(System.Windows.SRID.PropertyNotBindable, new object[] { dp.Name }), "dp");
    }
 ....

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MandMEvangelists

    MandMEvangel

    28 Ocak 2008
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • JeezyVEVO

    JeezyVEVO

    12 Mayıs 2009