좋아, 내 문제는 다음과 같습니다.
많은 검은 색 원과 하나의 빨간색 원이있는 Canvas를 보여주는 UI가 있습니다.
그래서 : "시작"버튼을 누르면 코드가 빨간색 원을 오른쪽으로 10 번 이동합니다. 논리에서 나는 모든 이동 후 모든 교차점을 계산합니다. 그래서 10 번 계산합니다. 하지만 이제는 움직일 때마다 UI를 업데이트하고 교차로를 표시하고 싶습니다.
여기에 코드 예제
for(int i = 0; i < 10; i++)
{
rc.xValue += 20;
calculateIntersections();
//now here the UI should be updated
Thread.Sleep(1000);
}
그래서 나는 논리의 계산에서 "시각화"를 얻을 것입니다.
이것을 어떻게 알 수 있습니까?
바인딩을 사용할 수없는 이유 (또는 다른 방법을 모릅니다)의 문제는 바인딩을 사용하면 이동의 마지막 단계 만 볼 수 있다는 것입니다. 200을 오른쪽으로 움직이면 빨간 원이 보이게되는데 .....하지만 모든 걸보고 싶어요.
내가 시도한 것. 버튼을 클릭 할 때마다 단계를 세어 늘 렸습니다. 그러나 그것은 편안합니다. 나는 매번 클릭하지 않고 이것을 "영화"처럼 원한다. 그리고 많은 "카운터"보다 "foreach"가 많을수록 훨씬 쉽습니다.
Property는 INotifyPropertyChanged
바인딩 작업을 위해 인터페이스에서 오는 PropertyChanged 이벤트를 호출 해야합니다. 이를 달성하는 가장 빠른 방법이 있습니다.
코드 뒤에서
public partial class MainWindow : Window, INotifyPropertyChanged
{
private double _rcXValue;
public double RcXValue
{
get { return _rcXValue; }
set
{
_rcXValue = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("RcXValue"));
}
}
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 10; i++)
{
RcXValue += 20; //UI should be updated automatically
calculateIntersections();
await Task.Delay(1000);
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
XAML에서
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="260*"/>
<RowDefinition Height="59*"/>
</Grid.RowDefinitions>
<Canvas>
<Ellipse Fill="Red" Height="17" Canvas.Left="{Binding RcXValue}" Stroke="Black" Canvas.Top="107" Width="17"/>
</Canvas>
<Button Content="Button" Grid.Row="1" Click="Button_Click"/>
</Grid>
</Grid>
</Window>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다