내 UI에 listBox가 있고 viewmodel에 백업 컬렉션이 있습니다. 새 항목이 컬렉션에 추가 된 경우 새로운 사용자 정의 컨트롤이 UI에 추가되도록 databind/datatemplate을 시도했습니다. 그러나, 나는 이것이 완전히 작동하도록 할 수 없습니다. 명확히하기 위해 컬렉션의 항목 수에 대해 UI에 나타나는 올바른 컨트롤 수를 얻을 수는 있지만 사용자 정의 컨트롤의 속성을 컬렉션의 항목에 바인딩 할 수는 없습니다. 이것은 단지 나WPF UserControl 컬렉션에 바인딩
데이터 바인딩 WPF 코드 .. 다음이 나중에 훨씬 더 복잡한 지금이 문제를 가지고 아마 잘 만들기 위해 처음에 그것을 알아 내려고 경우 : UserControl에서
<ListBox x:Name="SubSystemList" ItemsSource="{Binding Path=SubSystems}">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type src:SubSystem}">
<controls:SubSystem DeviceCount="{Binding Path=DeviceCount}" SystemName="{Binding Path=Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
속성을 나는 (바로 ..) 단지에 따라 더 어려워 질 것 같이 더 많은 코드를 게시하기를 꺼려입니다
public string SystemName
{
get { return (string) GetValue(SubSystenNameProperty); }
set { SetValue(SubSystenNameProperty, value); }
}
public int DeviceCount
{
get { return (int) GetValue(DeviceCountProperty); }
set { SetValue(DeviceCountProperty, value); }
}
: 난으로 렌더링하기 위해 노력하고있다. Setters의 Debug WriteLine이 전혀 실행되지 않습니다 (중단 점에 도달하지 않음). 어느 것이 나를 경로/바인딩 문제라고 생각하게합니다.
도움을 주시면 감사하겠습니다.
편집 SRC : 하위 시스템 코드 : (명확성을 위해 제거 추가 속성) 된 UserControls에
public class SubSystem
{
[XmlAttribute("Name")]
[DataMember]
public string Name
{
get { return _name; }
set { _name = value; }
}
[DataMember]
public int DeviceCount
{
get { return _deviceCount; }
set { _deviceCount = value; }
}
}
DependencyProperties : 서브 시스템
public static readonly DependencyProperty DeviceCountProperty = DependencyProperty.Register(
nameof(DeviceCount), typeof(int), typeof(SubSystem));
public static readonly DependencyProperty SubSystenNameProperty = DependencyProperty.Register(
nameof(SystemName), typeof(string), typeof(SubSystem));
또 다른 편집
또한 머리를 긁적 이것을 드러내다 출력 로그 :
em.Windows.Data Error: 40 : BindingExpression path error: 'SystemName' property not found on 'object' ''SubSystem' (HashCode=32985660)'. BindingExpression:Path=SystemName; DataItem='SubSystem' (HashCode=32985660); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String')
나를 생각하게
는 같은 나던 뒤에 사용자 제어 코드에서 일어나는 일/바인딩을, 프로그래머 재미있는 일이, 내가 혼란스러워지고 후, 나는 subsystemcontrol하는 UserControl을 이름을 변경 , 그리고 uc의 바인딩 이름이 모두 올바른지 확인했습니다. 그래서 왜이 일이 전적으로 .. 왜 계속 나아가고 있는지 확실하지 않습니다.
그러나로되어 교체해야? UI에 바인딩하려면 Dependecy Properties로 정의해야합니다. msdn : https://msdn.microsoft.com/en-us/library/ms752914(v=vs.100).aspx – CiccioRocca
컨트롤을 참조하십시오. SubSystem을 사용하면 SystemName 및 DeviceCount를 수정할 수 있어야합니다. 그런 다음 UI에서 수정해야합니다. 값을 수정하지 않으면 세터에 히트가 없습니다. 수정하고 확인하고 있습니까? – CarbineCoder
@cicciorocca이 속성은 확실히 DependencyProperties입니다. 첫 번째 헤드 스크래치였습니다. 나는 그 코드를 간결하게하기 위해 그 코드를 포함 시켰습니다. –