我與MVVM @MikroDel同意只辦法就在WPF工作..我的財產以後這樣的而不是有兩個CMBS,而不是在數據網格但並不需要是不同的,因爲在所有的每個組合在viewModel中將所選索引設置爲屬性,對於按鈕也是如此。
在這個例子中,我使用RelayCommand
你可以閱讀hare關於使用它,但不是這個q主題。如果選擇指數
另外我用一個轉換器「Like按鈕的原因也使= 0,因此implementd很簡單
namespace MCSearchMVVM
{
class MCBindButtonToComboBox : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return false;
return true;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{ throw new NotImplementedException(); }
}
}
我們真正的東西;) 小意見之前,這是我喜歡永諾把視圖(的.xaml文件)和VM(cs文件)在同一個文件夾中,這就是爲什麼我覺得這個例子非常快笑
首先我們begon這樣的觀點:
<UserControl x:Class="MCSearchMVVM.AddFilePage"
...
xmlns:local="clr-namespace:MCSearchMVVM"
...>
<UserControl.Resources>
<local:MCBindButtonToComboBox x:Key="enableCon"/>
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
...
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<Grid.Background>
...
</Grid.Background>
<Button Content="Browse.."
...
Command="{Binding BrowseCommand}"
IsEnabled="{Binding FileKindIndexSelected,
Converter={StaticResource enableCon}}"
.../>
<ComboBox ... SelectedIndex="{Binding FileKindIndexSelected, Mode=TwoWay}" ... >
...
</ComboBox>
...
</Grid>
現在視圖模型:
public class AddFileViewModel : ObservableObject, IPageViewModel
{
...
private int _fileKindIndexSelected;
public int FileKindIndexSelected
{
get { return _fileKindIndexSelected; }
set { SetField(ref _fileKindIndexSelected, value, "FileKindIndexSelected");}
}
...
}
而且SetField FUNC
public abstract class ObservableObject : INotifyPropertyChanged
{
[Conditional("DEBUG")]
[DebuggerStepThrough]
public virtual void VerifyPropertyName(string propertyName)
{
if (TypeDescriptor.GetProperties(this)[propertyName] == null)
{
string msg = "Invalid property name: " + propertyName;
if (this.ThrowOnInvalidPropertyName)
throw new Exception(msg);
else
Debug.Fail(msg);
}
}
protected virtual bool ThrowOnInvalidPropertyName { get; private set; }
#region INotifyPropertyChanged
public virtual void RaisePropertyChanged(string propertyName)
{
this.VerifyPropertyName(propertyName);
OnPropertyChanged(propertyName);
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
protected bool SetField<T>(ref T field, T value, string propertyName)
{
if (EqualityComparer<T>.Default.Equals(field, value))
return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
#endregion // INotifyPropertyChanged
}
}
我希望的方向是有幫助.. 而且對不起,我的英語不好=))
Farzi - 如果答案對你有幫助 - 請把它提出來。如果是解決方案 - 也接受它 – MikroDel
因爲今天你有6個問題和0接受答案! – MikroDel
不是。您提供的網址並不回答我的問題。我的按鈕位於Datagrid之外,所以通過使用DataTriggers和爲Combobox提供元素名稱將無濟於事,因爲它們位於datagrid中,而按鈕位於dataGrid之外,所以它不會起作用。但是如果我們可以使用Relative source屬性,可能會有所幫助..但我不知道如何在數據觸發器中使用它,因爲每當我使用它時,都會給我一個例外 – Vishal