실버 라이트 네비게이션 애플리케이션을 개발 중이며 다음과 같은 문제가 발생했습니다. MVVM을 사용하여 클래스와 목록 상자를 연결합니다. 수업은 이름, 일부 텍스트 및 이메일 주소입니다.MVB를 사용하여 silverbox의 ListBox에 TextBlock을 바인딩
public class ContactPage
{
public List<ContactInfo> Contacts { get; set; }
public Image Image { get; set; }
public string Description { get; set; }
//some other code not needed
}
public class ContactInfo
{
public string Name { get; set; }
public List<string> Data { get; set; }
public List<Url> Urls { get; set; }
public ContactInfo(string name, List<string> data, List<string> urls)
{
Name = name;
Data = data;
Urls = urls;
}
}
문제가있는 부분을 포함하는 XAML 파일은 지금이 개 질문이이
<ListBox ItemsSource="{Binding ContactPage.Contacts, Mode=TwoWay}" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name, Mode=TwoWay}" FontWeight="Bold"/>
<ListBox x:Name="dataListBox" ItemsSource="{Binding Data, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="???"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox ItemsSource="{Binding Urls, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<HyperlinkButton Content="{Binding Address, Mode=TwoWay}" ClickMode="Press">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding NavigateCommand}"
CommandParameter="{Binding Action, Mode=TwoWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</HyperlinkButton>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
것 같습니다.
문자열 목록 인 데이터에 목록 상자를 바인딩하려고합니다. 나는 분리 된 본체에서 원하는이 요소 ...의 각 속성에 내가 하이퍼 링크 버튼을 클릭 할 수있는 방법 올바른 데이터
<ListBox x:Name="dataListBox" ItemsSource="{Binding Data, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="???"/> <!--What to put here???-->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
를 보여줍니다 그래서이 texblock을 결합해야합니까. viewmodel에 모든 것을 설정했지만 링크를 클릭해도 아무 일도 일어나지 않습니다. 버튼이 목록 항목이지만이를 해결하는 방법이 확실하지 않기 때문입니다. 답변에 대한 감사합니다 ... 첫 번째는 잘 작동하지만 두 번째 나던 ... 난 그냥 같은 지휘가 : 사람이
이
편집 ... 적어도 하나의 문제를 도와 줄 수있는
는희망 당신이 언급하는 사이트에. 여기에 내가 무슨 짓을하지만 그것은 작동하지 않습니다 :
public ICommand NavigateCommand
{
get { return new RelayCommand<object>(param => Navigate(param), param => true); }
}
private void Navigate (object parameter)
{
Url url = parameter as Url;
if (url.Action.StartsWith("http"))
{
HtmlPage.Window.Navigate(new Uri(url.Action, UriKind.Absolute), "_blank");
}
else if (url.Action.StartsWith("mailto"))
{
HtmlPage.Window.Navigate(new Uri(url.Action, UriKind.Absolute));
}
}
이 그냥이 지금
<ListBox Name="linkListBox" ItemsSource="{Binding Urls, Mode=TwoWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<HyperlinkButton Content="{Binding Address, Mode=TwoWay}" ClickMode="Press">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding NavigateCommand}"
CommandParameter="{Binding ElementName=linkListBox, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</HyperlinkButton>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
좋아 모두 지우기
public class Url
{
public string Address { get; set; }
public string Action { get; set; }
public Url(string address, string action)
{
Address = address;
Action = action;
}
}
와 바인딩 외모를 가지고 실제 URL 클래스입니다 디버그 모드에서 NavigateCommand를 실행하지 않습니다 ...