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

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • Jonnyriddlin1

    Jonnyriddlin

    4 Ocak 2007
  • LiteralMSPaint

    LiteralMSPai

    27 EKİM 2010