바인딩의 기본값은 무엇입니까?Mode= WPF 컨트롤의 기본값은 무엇입니까?
WPF에서 기본값을 선택하면 바인딩되는 속성에 따라 달라집니다.
다양한 컨트롤의 기본값에 대한 목록이나 규약 또는 정보를 찾고 있습니다.
내 말은, 어떤 속성이TwoWay기본적으로 등입니다.어떤 연결고리, 아이디어, 생각, 심지어 불평도 환영합니다!
UpdateSourceTrigger와 마찬가지로 Mode 속성의 기본값은 속성마다 다릅니다.다음과 같은 사용자 편집 가능 속성
TextBox.Text,ComboBox.Text,MenuItem.IsChecked등을 가지고 있습니다.TwoWay기본 모드 값으로 설정합니다.기본값이 다음인지 확인하는 방법TwoWay속성의 종속성 속성 정보 섹션을 확인합니다.라고 되어 있다면,BindsTwoWayByDefaulttrue로 설정된 경우 속성의 기본 Mode 값은TwoWay프로그래밍 방식으로 이 작업을 수행하려면 다음을 호출하여 속성의 속성 메타데이터를 가져옵니다.GetMetadata그런 다음 부울 값을 확인합니다.BindsTwoWayByDefault소유물.
출처: https://web.archive.org/web/20100209025938/http ://blogs.msdn.com/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx
가장 안전한 방법은 바인딩에서 원하는 바인딩 모드를 항상 명시하는 것입니다.
DP에서 지원하는 기본 모드를 찾는 방법은 다음과 같습니다.
.NET Reflector는 당신의 친구입니다.리플렉터를 사용하여 검색
TextBox그리고 정적 생성자의 소스를 살펴봅니다(.cctor()) 여기에서 등록에 사용된 코드를 찾을 수 있습니다.TextPropertyDP:TextProperty = DependencyProperty.Register ( "Text", typeof(string), typeof(TextBox), new FrameworkPropertyMetadata ( string.Empty, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(TextBox.OnTextPropertyChanged), new CoerceValueCallback(TextBox.CoerceText), true, UpdateSourceTrigger.LostFocus ) );기본 바인딩 모드를 나타내는 매개 변수가 Register 메서드로 전달됩니다.
FrameworkPropertyMetadataOptions.BindsTwoWayByDefaultReflector를 사용하여 TextBlock의 Text DP에 대한 등록을 확인하면 이러한 값이 전달되지 않는 것을 볼 수 있습니다. 이 경우 바인딩은 기본적으로 단방향입니다.
Bea Stollnitz의 게시물에서 가져온 것: 템플릿 내에서 명시적 바인딩을 업데이트하려면 어떻게 해야 합니까?
비록 중요한 DP의 목록을 가지고 있는 것이 매우 도움이 될 것입니다.
또한 성능을 향상시키기 위해 단방향으로 설정할 수 있는 바인딩을 찾기 위해 목록을 찾고 있었습니다.다음 기능은 기본적으로 양방향 바인딩을 사용하는 컨트롤을 찾는 데 도움이 됩니다.
public IList<DependencyProperty> GetAttachedProperties(DependencyObject obj)
{
var result = new List<DependencyProperty>();
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(obj, new Attribute[] { new PropertyFilterAttribute(PropertyFilterOptions.Valid) }))
{
var dpd = DependencyPropertyDescriptor.FromProperty(pd);
if (dpd != null)
{
result.Add(dpd.DependencyProperty);
}
}
return result;
}
public bool IsBindsTwoWayByDefault(DependencyObject obj, DependencyProperty property)
{
var metadata = property.GetMetadata(obj) as FrameworkPropertyMetadata;
if (metadata != null)
{
return metadata.BindsTwoWayByDefault;
}
return false;
}
인쇄 기능을 사용하면 다음과 같은 목록을 얻을 수 있습니다.
var objList = new List<DependencyObject> { new TextBox(), new TextBlock(), new Label(), new ComboBox(), new Button() };
foreach (var obj in objList)
{
var props = GetAttachedProperties(obj);
foreach (var prop in props)
{
if(IsBindsTwoWayByDefault(obj, prop))
Debug.WriteLine($"{obj} : {prop.OwnerType}:{prop.Name}");
}
}
샘플 결과(양방향 바인딩을 기본값으로 하는 제어 특성)
System.Windows.Controls.TextBox : System.Windows.Controls.TextBox:Text
System.Windows.Controls.TextBox : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.TextBlock : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.Label : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:IsDropDownOpen
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.ComboBox:Text
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedIndex
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedItem
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.Primitives.Selector:SelectedValue
System.Windows.Controls.ComboBox Items.Count:0 : System.Windows.Controls.TextSearch:Text
System.Windows.Controls.Button : System.Windows.Controls.TextSearch:Text
흥미롭게도 대부분의 컨트롤에는 양방향 바인딩이 있는 TextSearch 속성이 있습니다.
언급URL : https://stackoverflow.com/questions/1797105/what-are-the-defaults-for-binding-mode-default-for-wpf-controls
'programing' 카테고리의 다른 글
| 저장 프로시저에서 OUTPUT 파라미터(옵션)를 사용할 수 있습니까? (0) | 2023.05.20 |
|---|---|
| .NET 4.0 프로젝트에서 .NET 2.0 혼합 모드 어셈블리를 참조하려면 어떤 '추가 구성'이 필요합니까? (0) | 2023.05.20 |
| 이전 커밋에서 파일 복원 (0) | 2023.05.20 |
| 셸 스크립트에서 문자열이 비어 있지 않거나 공백이 아닌지 확인 (0) | 2023.05.20 |
| 스트림을 C#의 파일에 저장하려면 어떻게 해야 합니까? (0) | 2023.05.15 |