, 첫 번째 질문, 그냥 내가 올바른 생각을 가지고 있는지 확인하기 위해, 나는 이런 식으로 뭔가를 할 것이라고 생각 :
new RelayCommand<MyClass>((mc) => MyMethod(mc.Prop_A, mc.Prop_B, mc.Prop_C)
이 올바른 것입니다. 내가 XAML에서 바인딩 할 때
그래, 그럼 어떻게 내가 실제로이에 매개 변수를 전달 않는 한 위의 답을 가정? 이 명령은 이 창/페이지의 단추와 연결되므로 Button의 Command 속성을 사용하여 이됩니다. 어떻게하면 실제로 MyClass 인스턴스 Prop_A, Prop_B 및 Prop_C에 대한 값을 전달합니까?
이것은 실제로 Prop_A, Prop_B 및 Prop_C의 출처에 달려 있습니다. 이러한 속성이 이미보기 모델 내에 있으면 XAML을 사용하여 매개 변수를 전달할 필요가 없습니다.
new RelayCommand<MyClass>((mc) => MyMethod(mc.Prop_A, mc.Prop_B, mc.Prop_C)
우리는 우리가 우리의 뷰 모델을로드 할 때, 우리는 우리가 필요로하는 모든 것을 가지고 있는지 확인해야합니다
new RelayCommand<object>((param) =>
{
// param is not used.
var mc = this.MC; // assuming your view model holds the mc value
MyMethod(mc.Prop_A, mc.Prop_B, mc.Prop_C);
});
로 변경됩니다. 그렇지 않으면 IoC
을 사용하여 필요한 모든 항목을 가져 오십시오. 나는 멀리 체재 할 것 9.
<Button Grid.Row="0" Grid.Column="1" Content="7" Command="{Binding PerformAction}" CommandParameter="7"/>
- 당신의 명령에 매개 변수를 바인딩
는
당신이 당신의 명령, 0에있는 버튼 값을 전달하려는 계산기 응용 프로그램 같은 것을 종종 유용 보기에서 클래스를 정의합니다. 우려의 분리를 위해보기는 모델이 아닌 경계가 지정된 속성 만 알고 있어야합니다. 여기
<Button Content="Test" Style="{StaticResource contextMenuAware}" Command="{Binding MultiParameterCommand}">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource MultiValueConverter}">
<Binding Path="Items"/>
<!-- Pass more Bindings here or static values -->
</MultiBinding>
</Button.CommandParameter>
</Button>
는 컨버터의 포함을위한 코드입니다 :
class MultiValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
foreach (var item in values)
{
//process the properties passed in and you will need to unbox those parameters
}
return new object();
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
을 그리고 XAML에서 (버튼 코드) :