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ş:
İki yönlü veya OneWayToSource bağlama ...
Nasıl Varlık Çerçevesi Veri İçeriği sa...
Objective-C salt okunur Özellikleri?...
Statik salt okunur vs inş...
Salt okunur olmayan bilgisayarlı Swift...