저는 Silverlight 및 데이터 바인딩 개념을 처음 사용하고 있으며 여전히 문제를 해결하지 못했습니다. 나는 며칠간의 연구 끝에 해결책을 찾을 수 없었다. 아래 볼 수문자열 속성에 텍스트 데이터 바인딩
내가 제대로 내 TextBlock
의 텍스트에 String
속성을 바인딩 :
여기 내 문제가
에서 MainPage.xaml
<Grid Background="Blue" DataContext="{StaticResource WP8Displayable}">
<TextBlock x:Name="tbCanvasTitle" TextWrapping="Wrap" Text="{Binding titleDisplayable}" FontWeight="Bold" HorizontalAlignment="Center"/>
</Grid>
WP8Displayable. CS
public class WP8Displayable : IDisplayable, INotifyPropertyChanged
{
public String title { get; set; }
#region INotifyPropertyChanged Members
public string titleDisplayable
{
get
{
return title;
}
set
{
if (title != value)
{
title = value;
NotifyPropertyChanged("titleDisplayable");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
// Used to notify the page that a data context property changed
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
public void setTitle(String s)
{
this.title = s;
NotifyPropertyChanged("titleDisplayable");
}
}
WP8Displayable
클래스의 인스턴스를 하나 이상 인스턴스화 할 수있는 스레드가 내 MainPage.xaml.cs
에 있습니다. 인스턴스 중 하나 인 setTitle(String s)
이 내 TextBlock의 텍스트를 업데이트하지 않으면 내 DataContext
이 제대로 설정되지 않은 것으로 보입니다.
편집 : 내 스레드가 MainPage_Loaded(object sender, RoutedEventArgs e)
방법에 MainPage.xaml.cs
에 출시과 같은 것을 수행한다
:
var instanceWP8Displayable = new WP8Displayable();
//tbCanvasTitle.DataContext = instanceWP8Displayable; HERE IS WHAT I WOULD LIKE TO DO ON XAML
instanceWP8Displayable.setTitle("my Title");
편집 2 : App.xaml
<Application
x:Class="AMS.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:windows="clr-namespace:System.Windows;assembly=System.Windows"
xmlns:ioC="clr-namespace:AMS.Controller">
<!--Application Resources-->
<Application.Resources>
<windows:ResourceDictionary>
<local:LocalizedStrings xmlns:local="clr-namespace:AMS" x:Key="LocalizedStrings"/>
<ioC:Locator x:Key="Locator" x:Name="Locator" />
</windows:ResourceDictionary>
</Application.Resources>
에서 MainPage.xaml 내가 동적 경우에서의 DataContext를 설정하는 방법
<Grid x:Name="LayoutRoot" Background="White">
<Grid Background="Blue" DataContext="{Binding Source={StaticResource Locator}, Path=WP8Displayable}">
<TextBlock x:Name="tbCanvasTitle" TextWrapping="Wrap" Text="{Binding titleDisplayable}" FontWeight="Bold" HorizontalAlignment="Center"/>
</Grid>
<Grid.DataContext>
<local:WP8Displayable />
</Grid.DataContext>
</Grid>
? 그리고 동일한 객체에 둘 이상의 인스턴스를 연결할 수 있습니까?
실마리가 있거나 제 질문이 명확하지 않은 경우 주저하지 마십시오.
감사합니다.
오른쪽에 코드에서 datacontext를 설정할 때 제목이 업데이트됩니까? – Mark
예. 작동합니다. 제 바인딩이 괜찮은지 확인하려고했습니다. 하지만 WP8Displayable 인스턴스가 언제 그리고 얼마나 많이 생성 될지는 알 수 없습니다. – Yann