GPS 신호가 활성화되어 있는지 알려주는 WP8 애플리케이션에 함수를 생성하고 싶습니다. 작은 그림, 질문 표시가 있으면 X를 표시하고,없는 경우 X를 표시합니다. 데이터 및 확인 표시가 있으면 OK를 누릅니다. MVVM Light로 작업하고 있습니다. 뷰 모델 클래스에서동적으로 이미지 소스 바인딩
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string path = System.Convert.ToString(value);
if (App.Geolocator != null)
{
switch (App.Geolocator.LocationStatus)
{
case Windows.Devices.Geolocation.PositionStatus.Disabled:
path = "/Assets/close.png";
break;
case Windows.Devices.Geolocation.PositionStatus.Initializing:
path = "/Assets/questionmark.png";
break;
case Windows.Devices.Geolocation.PositionStatus.NoData:
path = "/Assets/close.png";
break;
case Windows.Devices.Geolocation.PositionStatus.NotAvailable:
path = "/Assets/close.png";
break;
case Windows.Devices.Geolocation.PositionStatus.NotInitialized:
path = "/Assets/questionmark.png";
break;
case Windows.Devices.Geolocation.PositionStatus.Ready:
path = "/Assets/check.png";
break;
default:
path = "/Assets/close.png";
break;
}
}
else
{
path = "/Assets/questionmark.png";
}
return path;
}
: 나는 변환기를 만든
...
DataContext="{Binding Signal, Source={StaticResource Locator}}">
...
<Image Source="{Binding Signalstrength.Imageuri, Converter={StaticResource SignalstatusConverter}}" Width="38" Height="38" HorizontalAlignment="Right" Grid.Column="1" />
:
내보기에, 나는이 라인을 가지고 : 여기
는 내가 지금까지 무엇을 가지고 :public class SignalViewModel : ViewModelBase
{
private Signalstrength _signalstrength;
public Signalstrength Signalstrength
{
get { return _signalstrength; }
set
{
_signalstrength = value;
Set("Signalstrength", ref _signalstrength, value);
}
}
public SignalViewModel()
{
_signalstrength = new Signalstrength
{
Imageuri = "/Assets/questionmark.png",
State = "initializing"
};
}
}
모델 :
public class Signalstrength : ObservableObject
{
private string _state;
private string _imageuri;
public string State
{
get { return _state; }
set
{
_state = value;
Set("State", ref _state, value);
}
}
public string Imageuri
{
get { return _imageuri; }
set
{
_imageuri = value;
Set("Imageuri", ref _imageuri, value);
}
}
}
응용 프로그램을 실행할 때 제대로 작동하지만 한 번만 실행됩니다. 내 MainPage에서 Geolocator를 시작하면 내 위치를 찾았으므로 Status는 OK 여야하지만 이미지는 여전히 체크 표시가 아니라 Questionmark 이미지입니다.
무엇이 누락 되었습니까? 이미지를 새로 고치려면 어떻게해야합니까? 마지막으로 MVVM 요구 사항을 충족시키기 위해 구현 한 방법이 있습니까?
편집 : 이 문제가 될 수 있다면 나도 몰라,하지만 난 3 ViewModels 있습니다 MainViewModel, WorkoutViewModel 및 SignalViewModel을. 내 메인 페이지에서 다음과 같이 표시합니다.
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<views:WorkoutView IsHitTestVisible="False" />
</Grid>
<Grid Grid.Row="2">
<views:SignalstrengthView IsHitTestVisible="False" />
</Grid>
해당 뷰에서 DataContext를 설정합니다. MainViewModel은 MainPage 용이며 Applicationbar 용으로 사용합니다. 사용자가 AppbarButton을 클릭하면 GPS가 켜집니다. 이 코드는 MainViewModel에 있지만이 변경 사항을 표시 할 항목은 SignalViewModel에 있습니다. 이것이 문제가 될 수 있습니까?
EDIT2 : 그것은이의 나는 UI를 업데이트 할 수 없기 때문에 Geolocator는 백그라운드 스레드에서 실행 보인다.
가 보이는되는 뷰 모델
의 생성자에서 새 모델
입니까? –
필요할 경우 Set()이 자동으로 호출한다고 생각합니다. – fzl
나는 Signalstrength에 대한 변경으로 그것을 부른다라고 생각한다. 왜냐하면, 당신의 코드가 나에게 맞아 보이기 때문입니다. 나는 정말로 그것을 테스트하기 위해 atm과 나의 전화가 없다. –