데이터 형식의 연결된 속성에 흥미로운 점이 있지만 매우 이상하다는 것을 알고 있습니다.데이터 형식의 동작 초기화
내가 그것에 종속성 속성과 동작을, 재산은 당신이 볼 수 있듯이 List<DataStatePair>
[System.Windows.Markup.ContentProperty("StateDefinitions")]
public class MultiDataStateBehavior: StateBehaviourBase
{
public List<DataStatePair> StateDefinitions
{
get { return (List<DataStatePair>)GetValue(StateDefinitionsProperty); }
set { SetValue(StateDefinitionsProperty, value); }
}
// Using a DependencyProperty as the backing store for StateDefinitions. This enables animation, styling, binding, etc...
public static readonly DependencyProperty StateDefinitionsProperty =
DependencyProperty.Register("StateDefinitions", typeof(List<DataStatePair>), typeof(MultiDataStateBehavior), new PropertyMetadata(new List<DataStatePair>()));
}
을 입력, 난 content 속성으로 표시했습니다. XAML은 다음과 같습니다.
<DataTemplate>
<!-- VISUAL STATES OMITTED FOR BREVITY-->
<Grid x:Name="grid" Background="Transparent" ContextMenu="{StaticResource ContextMenu_ToolMenu}">
<i:Interaction.Behaviors>
<ext:MultiDataStateBehavior Binding="{Binding Type}">
<ext:DataStatePair State="None" Value="{x:Null}"/>
<ext:DataStatePair State="Gauge" Value="{x:Static jcm:ToolType.Gauge}"/>
<ext:DataStatePair State="Repeater" Value="{x:Static jcm:ToolType.Gauge}"/>
</ext:MultiDataStateBehavior>
</i:Interaction.Behaviors>
</Grid>
</DataTemplate>
문제가 있습니까? 3 DataStatePair 인스턴스는 데이터 형식을 사용할 때마다 추가됩니다. 내 응용 프로그램에서 템플릿을 32 번 사용하고 총 96 개의 DataStatePair 인스턴스를 얻습니다. 그리즐리! 이것이 가능한 방법을 이해합니다. 비헤이비어는 데이터 템플릿에 대해 정적이지만 DataStatePair 인스턴스는 아니며 목록을 추가 할 수 있습니다.
종속성 속성을 IEnumerable로 변경하면 모든 것이 손상되어 컴파일되지 않습니다. XAML에서 x : Array를 사용하여 속성을 명시 적으로 설정하면 모든 것이 예상대로 작동합니다. 아래의 XAML;
<i:Interaction.Behaviors>
<ext:MultiDataStateBehavior Binding="{Binding Type}" UseTransitionsOnLoad="True">
<ext:MultiDataStateBehavior.StateDefinitions>
<x:Array Type="{x:Type ext:DataStatePair}">
<ext:DataStatePair State="None" Value="{x:Null}"/>
<ext:DataStatePair State="Gauge" Value="{x:Static jcm:ToolType.Gauge}"/>
<ext:DataStatePair State="Repeater" Value="{x:Static jcm:ToolType.Gauge}"/>
</x:Array>
</ext:MultiDataStateBehavior.StateDefinitions>
</ext:MultiDataStateBehavior>
</i:Interaction.Behaviors>
왜 이것이 가장 훌륭한 해결책인지 누구에게 알 수 있습니까? 나는 Microsoft 구현으로 x : Array를 사용하지 않을 것이라고 상상할 수 있습니다.
편집 : x : Array 솔루션은 블렌드 디자이너를 중단시킵니다.
XamlParseException : 타입의 컬렉션에 부가 가치를 'System.Collections.Generic.IEnumerable (SSW.WPFExtensions.DataStatePair)' 예외가 발생했습니다.
편집 : [System.Windows.Markup.ContentProperty("StateDefinitions")]
속성 정의를 제거하면 잘 작동합니다. 나는 무슨 일이 일어나는지 이해하지 못한다!
WPF, 뭐하는거야? WPF, 스태프